zoukankan      html  css  js  c++  java
  • 基于用户的协同推荐算法

    协同过滤是推荐算法中最基本的算法,主要分为基于用户的协同过滤算法和基于物品的协同过滤算法。


    这篇文章主要介绍基于用户的协同过滤算法,简单来说,要给用户u作推荐,那么只要找出那些和u之前的行为类似的用户,即和u比较像的用户,把他们的 行为推荐给用户u即可。所以基于用户的系统过滤算法包括两个步骤:1)找到和目标用户兴趣相似的用户集合  2)找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。


    第一步的关键点在于计算用户之间的相似度,相似度一般通过Jaccard公式或者余弦相似度即可求得,及计算共有行为所占的比重(具体式子 google就行,csdn插入公式不方便。。。),所以目前而言,计算用户相似度的复杂度是O(N*N), N为用户数量,在用户数比较大的网站中不实用,比如亚马逊用户数量肯定N>100000,那么这样的复杂度是不可接受的。 

    第一步时间复杂度的改进方法:因为很多用户间其实相似度是为0的,如果看成是一个N*N的矩阵的话,肯定是个稀疏矩阵,那么我们其实没有必要浪费计 算量在这些0上。我们可以建立物品到用户的倒查表,及可以根据物品找到所有对该物品有过行为的用户,然后遍历各物品,对一个物品然后找到对该物品有过行为 的用户,然后计算这些用户间的行为相似度(共有行为+1,同时计算这些用户的行为数),最后计算两用户间的公有行为占各自行为的比重。

    第一步计算相似度的改进方法:举个例子:如果两人都买过《新华辞典》,并不能说明这两人想像,因为这本书基本上人人都会买,而如果这两人都买过《机 器学习》,那么我们可以肯定,这两人在这方面有相同的兴趣爱好,也就是说,越是对冷门物品有同样的行为,就越说明用户的相似性,即在计算用户相似性的时 候,需要降低热门物品的影响(通过计算流行度来实现,然后用1/N(i)来计算公共行为比重,N(i)表示流行度,这样,流行度高的物品所占比重就比较 低)


    第二步则比较简单,选出K个和用户u最相似的用户,把他们喜欢过的物品并且用户u没有喜欢过的物品推荐给u即可。这里面K的选择非常重要。K越大,推荐的结果就越热门,流行度就越高,同时覆盖率越低,因为基本推荐的都是流行的物品.


    第二步评分预测改进方法:一般来说并不是所有第二步中的物品都会推荐给用户,因为这样的物品还是非常多的,一般来说我们会选择topN, 选用户可能最感兴趣的N个商品。那么要选择前N个商品,肯定是根据评分来进行排序,这样便会遇到一个问题,不同人的评分基点不同,比如A评分基点在4,好 看的电影评5分,不好看的评3分,但是B基点是2,好看的评3分,不好看的评1分,这样的话直接根据评分来计算是不精确的,改进方法是计算用户在基点上的 评分,如A对好看的电影给了(5-4)分,对不好看的电影给了(3-4)分,B对好看的电影给了(3-2)分,对不好看的电影给了(1-2)分,这样来看 其实两者对电影的评价是类似的,而在计算需推荐用户对电影的评分时,只需要计算邻域的均值加上该用户的基点(一般用平均值来算)


    基于用户的协同过滤算法在实际应用得比较少,一方面是因为用户多了,算法的复杂度还是很高,另一方面是这样的推荐很难给出推荐理由,故一般工业界都选择基于物品的协同过滤算法。

  • 相关阅读:
    稳扎稳打Silverlight(13) 2.0交互之鼠标事件和键盘事件
    稳扎稳打Silverlight(17) 2.0数据之详解DataGrid, 绑定数据到ListBox
    再接再厉VS 2008 sp1 + .NET 3.5 sp1(2) Entity Framework(实体框架)之详解 Linq To Entities 之一
    稳扎稳打Silverlight(8) 2.0图形之基类System.Windows.Shapes.Shape
    稳扎稳打Silverlight(11) 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画
    稳扎稳打Silverlight(21) 2.0通信之WebRequest和WebResponse, 对指定的URI发出请求以及接收响应
    稳扎稳打Silverlight(16) 2.0数据之独立存储(Isolated Storage)
    稳扎稳打Silverlight(9) 2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    稳扎稳打Silverlight(23) 2.0通信之调用WCF的双向通信(Duplex Service)
    游戏人生Silverlight(1) 七彩俄罗斯方块[Silverlight 2.0(c#)]
  • 原文地址:https://www.cnblogs.com/peizhe123/p/4634186.html
Copyright © 2011-2022 走看看