说完User说Item。自我感觉大同小异,理论上来看都还是很简单的。比较是学习他人的算法而不是创造算法。最后把User-item来做个比较。

基于Item的协同过滤算法

首先提出假设:

  • 用户喜欢跟他过去喜欢的物品相识的物品
  • 历史上相似的物品在未来也相似

基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。别慌后面看图解释。

基于物品协同过滤算法java代码 基于item的协同过滤算法_基于物品协同过滤算法java代码


首先你要清楚我说的是基于Item的推荐算法。至于这张图,喜欢物品A的人往往喜欢物品C,于是我将物品C推给用户C。物品a为啤酒,物品c为尿布,符合图例,则仍然向用户C推荐的物品为尿布,显然这里的相似并不是绝对的相同种类或类型的物品。也就是说物品的相似不单单是外观或者功能相似。

核心思想:

  • 给定用户U,找到他过去喜欢的物品的集合R(u)
  • 把和R(U)相似的物品推荐给U

构建物品的同现矩阵进行归一化处理

通过UI矩阵得到一个II矩阵 =》 II=IU*UI,针对用户C对不同电影之间的相关性来计算评估C对于电影Titanic的评分。计算得到一个3.72 预计C还能接受。

理论上的思想就是这些,至于实现的细节我将在代码里面体现这里主要涉及到如何归一化等。

User Vs Item

User

Item

性能

适用用户较少场合,如果用户过多,计算用户相似矩阵代价太大

适用物品数量明显小于用户数量的场合,如果物品过多,计算物品相似度代价太大

领域

时效性强,用户个性化兴趣不太明显的领域

长尾物品丰富,用户个性化需求强烈

实时性

较弱

较强

冷启动

新用户,新商品

新用户只要产生物品行为,就可以进行推荐但是没有办法在不离线更新物品相似度的情况下进行物品推荐

推荐理由

很难提供让用户信服的推荐理由

利用用户行为历史给用户做出解释,比较有说服力


总结

借挑战杯的机会,新学习两个算法,还算是不亏吧!正巧在做大数据,为我以后的项目奠定了一点基础,也提供了解决问题的新思路。??? 代码后面补上。