12

我正在寻找一个基本的推荐引擎,它将获取并存储一个数字 ID 列表(与书籍相关),将它们与具有大量相同 ID 的其他用户进行比较,并根据这些发现推荐其他书籍。

经过一番谷歌搜索后,我找到了这篇文章,其中讨论了 Slope One 算法的实现,但似乎依赖于用户对所比较项目的评分。理想情况下,我希望在不需要用户提供评级的情况下实现这一目标。我假设如果用户在他们的收藏中拥有这本书,他们就会喜欢它。

虽然我可以默认每本书的评分为 10,但我想知道是否有更有效的算法可以使用。理想情况下,我想即时计算这些建议(避免批量计算)。任何建议,将不胜感激。

4

3 回答 3

11

您的任务的基本算法是基于协作记忆的推荐系统。这很容易实现,尤其是当您的项目(在案例书中)只有 ID 而没有其他功能时。

但是,正如您已经说过的,您需要用户对项目进行某种评分。但不要认为评分是 1 到 5 星,而更像是 0(未读过的书)和 1(已读过的书)之类的二元选择,或者对 .感兴趣不感兴趣

然后使用适当的距离度量来计算所有用户(及其项目集)与您自己之间的差异,选择与您最相似的n 个用户(无论活跃用户是谁),并挑选出您尚未评价的他们的项目 (或考虑,选择 0)。

我认为在这种情况下,一个好的距离度量是1-norm distance,或者有时称为曼哈顿距离。但在这一点上,您必须对数据集进行试验以获得最佳结果。

Breese 等人的论文《协作过滤预测算法的经验分析》是对这个主题的一个很好的介绍。可在此处获取(PDF)。对于研究论文,它很容易阅读。

于 2011-01-27T22:11:11.127 回答
2

Apriori 算法可以根据用户感兴趣的项目集为您提供建议。您必须定义自己的有趣集合的概念,例如用户在单个订单中购买的商品、用户曾经购买过的商品、用户评论过的商品、用户详细探索过的商品。

Apriori 算法需要批处理,但存在可能不需要批处理的改进。这些是 AprioriTid 和 AprioriHybrid(抱歉,没有链接)。

于 2010-12-21T19:15:38.973 回答
0

@ndg 这是非常有见地的,作为在该领域工作的人,我认为您使用相当于 ~ {0,1} 的评级系统是正确的。星级评分的大部分差异只是噪音。您可以允许 {0,1,2} 带有“喜欢它!” 按钮,但用户在使用此类按钮时也不一致,因此限制选择可能是件好事。Hotpot 让用户拥有 10 种超爱,保持一致。

我的建议是要小心不要用太宽泛的笔触绘画。换句话说,通用算法是最简单的,但您会错过机会主义的机会。

拿一个你非常熟悉的小数据集——比如让你的一些朋友使用这个网站——并注意所有可能对用户距离评级产生积极或消极影响的因素。然后在建模过程中,您必须决定哪些因素以及多少/多少。

请记住,范数的数量大约是曲线数量的大小。你可能想考虑一个准范数、伪范数,甚至是非连续范数。

我看不出使用曼哈顿范数的任何理由,事实上我会使用基于图形的范数来计算用户之间的距离。

于 2011-03-05T06:06:19.837 回答