3

嘿,我正在尝试学习一些在Amazon.com等网站中使用的推荐算法。所以我有这个简单的java(春季休眠postgres)书店应用程序,在书中有属性标题,类别,标签,作者。为了简单起见,书中没有内容。一本书必须以其标题,类别,作者和标签来标识。对于登录到应用程序的每个用户,我应该能够推荐一些书籍。每个用户都可以查看图书,将其添加到购物车并随时购买。因此,在数据库中,我存储了每个用户看过一本书的次数,购物车中的书以及用户购买的书。目前没有评分选项,但可以添加。针对书店应用的推荐系统

那么有人能告诉我哪些算法可以用来演示每位用户的书籍推荐吗?我想保持它非常简单。它不是一个销售项目,而只是为了扩展我对推荐算法的知识。所以假设总共只有约30本书(每本书5个类别和6本书)。如果有人也可以告诉我应该使用什么属性来计算两个用户之间的相似度,以及如何使用推荐的算法来处理它,这将非常有帮助。

在此先感谢。 5-羟色胺相。

回答

1

作为一个具体的具体例子,一个选项是“最近的K邻居”算法。

为了简化事情,假设您只有10本书,并且您只跟踪每个用户查看每本书的次数。然后,对于每个用户,您可能有一个数组int timesViewed[10],其中值timesViewed[i]是用户查看书号i的次数。

然后,您可以使用相关函数将用户与所有其他用户进行比较,例如Pearson correlation。计算当前用户c与另一用户o之间的关联给出的值介于-1.0和1.0之间,其中-1.0表示“此用户c与其他用户o完全相反”,1.0表示“此用户c是相同的作为其他用户o“。

如果您计算c与其他每个用户之间的核心关系,则会得到用户的查看模式与其他用户的查看模式相似程度的结果列表。然后,您选择K(例如5,10,20)最相似的结果(因此为算法的名称),即K用户的相关性得分最接近1.0。

现在,您可以对这些用户的每个timesViewed阵列进行加权平均。例如,我们会说averageTimesViewed[0]是K个用户中每个用户的timesViewed[0]的平均值,用它们的相关性得分加权。然后相互做相同的averageTimesViewed[i]

现在你有一个数组averageTimesViewed,它大体上包含了具有与c最相似的查看模式的K个用户查看每本书的平均次数。推荐具有最高averageTimesViewed得分的图书,因为这是其他用户表现出最感兴趣的图书。

它通常也值得排除用户已经从推荐阅读过的图书,但它仍然很重要计算相似性/相关性时考虑到这些因素。

另外请注意,这可以被扩展平凡采取其他数据考虑在内(例如购物车列表等)。此外,您还可以如果你想选择所有用户(即K =用户数),但是,这并不总是产生有意义的结果,通常选择一个合理的小K就足够了良好的效果,并快速计算。

+0

谢谢。让我想想你说的话,看看如何实现它。如果我被困在某个地方,我会尽快回复你。再次感谢。 – SerotoninChase 2011-02-26 02:48:06

+0

@SerotoninChase:不是问题。如果有什么事那里,不完全凝胶,或者其他任何你需要让你的算法运行起来,只是让我知道... :) – Mac 2011-02-26 02:49:55

1

读“集体智慧编程”建议。它会给你一个尝尝,还有更多。

1

你这里有自由的一个巨大的量。弥补两个用户之间的相似程度,然后制作一个单调的函数,将类似用户对书籍的评分作为输入,并为每本书返回分数。标准解决方案是使用矩阵乘法。

+1

谢谢您的回答,老子。此问题已关闭。我得到了我的答案。我又做了一些精彩的实验与相似之处,建议和协同过滤:) – SerotoninChase 2011-03-14 05:19:03

+0

啊,我的错误。谨慎与我们分享您的劳动成果,以及与谁共同分享这个问题? – isomorphismes 2011-03-14 05:25:22