书店应用程序的推荐系统
嘿,我正在尝试学习一些在Amazon.com等网站上使用的推荐算法。 所以我有这个简单的java(spring hibernate postgres)书店应用程序,其中Book中有属性title,category,tags,author。 为简单起见,书中没有内容。 必须通过标题,类别,作者和标签来识别书籍。 对于登录应用程序的每个用户,我应该能够推荐一些书籍。 每个用户都可以查看图书,将其添加到购物车并随时购买。 因此,在数据库中,我存储了每个用户查看书籍的次数,购物车中的书籍以及用户购买的书籍。 目前没有评级选项,但也可以添加。
那么有人可以告诉我,我可以用什么算法来certificate每个用户的书籍推荐? 我想保持它非常简单。 它不是一个可以出售的项目,而只是为了扩展我对推荐算法的了解。 因此,假设总共只有约30本书(每个5个类别和6本书)。 如果有人还可以告诉我应该用什么属性来计算两个用户之间的相似性以及如何使用推荐的算法来解决它,那将会非常有用。
提前致谢。 SerotoninChase。
作为特定的具体示例,一个选项是“最近的K邻居”算法。
为简化起见,假设您只有十本书,并且您只跟踪每个用户查看每本书的次数。 然后,对于每个用户,你可能有一个int timesViewed[10]
,其中timesViewed[i]
的值是用户查看书号i
次数。
然后,您可以使用相关函数(例如Pearson相关性)将用户与所有其他用户进行比较。 计算当前用户c
与另一个用户之间的相关性o
给出介于-1.0和1.0之间的值,其中-1.0表示“此用户c
与另一用户o
完全相反”,1.0表示“此用户c
是相同的”作为另一个用户o
“。
如果计算c
与其他每个用户之间的相关性,则会得到一个结果列表,其中显示用户的查看模式与其他用户的查看模式的相似程度。 然后,您选择K
(例如5,10,20)最相似的结果(因此算法的名称),即相关分数最接近1.0的K
用户。
现在,您可以对每个用户的timesViewed
数组进行加权平均。 例如,我们可以说timesViewed[0]
是每个K用户的timesViewed[0]
的平均值,按其相关性得分加权。 然后为彼此执行相同的averageTimesViewed[i]
。
现在你有一个数组averageTimesViewed
,粗略地说,包含与c
相似的观看模式的K个用户查看过每本书的平均次数。 推荐具有最高averageTimesViewed
得分的书,因为这是其他用户最感兴趣的书。
通常还要排除用户已经从推荐中看到的书籍,但在计算相似性/相关性时保留这些书籍仍然很重要。
另请注意,这可以简单地扩展到考虑其他数据(例如购物车列表等)。 此外,您可以根据需要选择所有用户(即K
=用户数),但这并不总能产生有意义的结果,并且通常选择相当小的K
足以获得良好的结果,并且计算速度更快。
您可以在此处找到所有信息和常见算法的实现(Taste框架)库。
“集体智慧在行动”是另一本我可以建议的书,除了其他海报的建议
阅读“编程集体智慧”。 它会让你体验它和更多。
你在这里拥有巨大的自由。 构成两个用户之间相似性的度量,然后制作单调函数,将类似用户的书籍评级作为输入并返回每本书的分数。 标准解决方案是使用矩阵乘法。
- 在Hibernate中持久化LinkedList
- 如何使用Hibernate将数据流式传输到数据库BLOB(在byte 中没有内存存储)
- JPA GenerationType.AUTO没有考虑具有自动增量的列
- 如何处理陈旧的连接?
- 使用JPA和Hibernate时@Size,@ Longth和@Column(length = value)之间的区别
- java.lang.IllegalArgumentException“无法使用Spring 4和Hibernate 4设置DAO字段”
- 从JPA实体反向设计DDL
- Hibernate:直接在bean中设置Id或调用load()或get()方法之间的区别?
- Java持久性:转换为Query.getResultList()的结果?