平均精度@ k平均召回@ k

时间:2016-10-26 15:30:51

标签: python algorithm average-precision

我有两套用户会话。每组包含两列:
  - 在线商店中已查看项目的ID   - 在线商店购买商品的ID

必须使用一组火车(最高产品等级),第二组必须用于测试。

购买商品的所有ID都不同。

我需要做
1.在测试集上计算已查看和购买的id的频率(一个id可以在viwed项中出现几次)
2.实现两种建议算法:
   - 按受欢迎程度对已查看的ID进行排序(频率出现在已查看的项目中)
    - 通过购买对已查看的ID进行排序(频率出现在购买的商品中)
3.使用此算法我需要计算 AverageRecall @ 1,AveragePrecision @ 1,AverageRecall @ 5,AveragePrecision @ 5

重要
- 用户未购买任何东西的会话,质量评估规则 - 如果在训练集中未找到该项目,则其受欢迎程度为0 - 需要推荐不同的物品。它的数量不应超过用户查看的不同项目的数量 - 建议不得超过两个数字的最小值:被查看项目的数量和召回时的k @ k /精度@ k。

我使用OrderedDict做的第一项任务(计算频率)。 对于第二项任务,我使用函数:

    def apk(viwed, bought, k=1):
            if len(predicted)>k:
                predicted = predicted[:k]

            score = 0.0
            num_hits = 0.0

            for i,p in enumerate(bought):
                if p in actual and p not in bought[:i]:
                    num_hits += 1.0
                    score += num_hits / (i+1.0)

            if not viewed:
                return 0.0

            return score / min(len(viewed), k)

    def mapk(actual, predicted, k=10):
        return np.mean([apk(a,p,k) for a,p in zip(actual, predicted)])

但我不知道如何计算第三个任务(每个k的平均召回等)以及如何处理OrderedDict。

0 个答案:

没有答案