嘿,我正在尝试学习一些在Amazon.com等网站上使用的推荐算法。所以我有这个简单的java(spring hibernate postgres)书店应用程序,其中Book中有属性title,category,tags,author。为简单起见,书中没有内容。必须通过标题,类别,作者和标签来识别书籍。对于登录应用程序的每个用户,我应该能够推荐一些书籍。每个用户都可以查看书籍,将其添加到购物车并随时购买。因此,在数据库中,我存储了每个用户查看书籍的次数,购物车中的书籍以及用户购买的书籍。目前没有评级选项,但也可以添加。
有人可以告诉我,我可以用什么算法来证明每个用户的书籍推荐?我想保持它非常简单。它不是一个可以出售的项目,而只是为了扩展我对推荐算法的了解。因此,假设总共只有约30本书(每个5个类别和6本书)。如果有人也可以告诉我应该用什么属性来计算两个用户之间的相似性以及如何使用推荐的算法来解决这个问题,那将会非常有用。
提前致谢。 SerotoninChase。
答案 0 :(得分:2)
您可以在here找到常用算法的所有信息和实现(Taste框架)库。
Collective Intelligence in Action是我可以提出的另一本书,除了其他海报的建议之外
答案 1 :(得分:1)
阅读“编程集体智慧”。它会让你体验它以及更多。
答案 2 :(得分:1)
作为一个具体的例子,一个选项是“最近的K邻居”算法。
为简化起见,假设您只有十本书,并且您只跟踪每位用户查看每本书的次数。然后,对于每个用户,您可能有一个数组int timesViewed[10]
,其中timesViewed[i]
的值是用户查看图书编号i
的次数。
然后,您可以使用相关函数将用户与所有其他用户进行比较,例如Pearson correlation。计算当前用户c
与另一个用户o
之间的相关性得出的值介于-1.0和1.0之间,其中-1.0表示“此用户c
与另一个用户完全相反{ {1}}“和1.0表示”此用户o
与其他用户c
“相同。
如果计算o
与其他所有用户之间的相关性,则会得到一个结果列表,其中显示用户的查看模式与其他用户的查看模式的相似程度。然后,您选择c
(例如5,10,20)最相似的结果(因此算法的名称),即相关分数最接近1.0的K
用户。
现在,您可以对每个用户的K
数组进行加权平均。例如,我们会说timesViewed
是每个K用户averageTimesViewed[0]
的平均值,并按其相关性得分加权。然后为彼此timesViewed[0]
做同样的事情。
现在你有了一个数组averageTimesViewed[i]
,其中大致说明了与averageTimesViewed
查看模式最相似的K用户查看过每本书的平均次数。推荐具有最高c
分数的书籍,因为这是其他用户最感兴趣的书籍。
通常还值得排除用户已经推荐过的书籍,但在计算相似性/相关性时保留这些书籍仍然很重要。
另请注意,这可以简单地扩展到考虑其他数据(例如购物车清单等)。此外,您可以选择所有用户(例如averageTimesViewed
=用户数),但这并不总能产生有意义的结果,并且通常选择相当小的{{1} }足以获得良好的结果,并且计算速度更快。
答案 3 :(得分:1)
你在这里拥有巨大的自由。构成两个用户之间相似性的度量,然后制作单调函数,将类似用户的书籍评级作为输入并返回每本书的分数。标准解决方案是使用矩阵乘法。