1

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

一组必须用于火车(顶级产品评级),第二组必须用于测试。

所有购买的物品的 id 都是不同的。

我需要做
1. 在测试集上计算查看和购买 id 的频率(一个 id 可以在查看的项目中出现多次)
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。

4

0 回答 0