一、协同过滤:找到与某用户有相同偏好的其它用户,具体步骤:
1 收集用户偏好(比如电影推荐时,某用户对某电影的的打分,评论、转发等)
2 找到相似的用户或者物品
3 计算推荐
基于用户的协同过滤:计算用户之间的相似度
用户A与用户C很相似,但是A没有买物品D,所以给A推荐物品D
存在问题:
1 对于一个新用户,很难找到与他相近的用户
2 对于一个物品(本来想推荐给A的),所有最近的邻居很少在上打分,导致物品A不会推荐给A
3 稀疏问题,维护的表(行为用户,列是所有物品),那这个表非常稀疏,因为可能有100W个物品,用户只买其中几个,所以维护这个表不方便
4 当用户数量非常大时,比较用户的计算量也特别大,因为每2个用户都要算相似度
5 用户的喜好容易改变
基于物品的协同过滤(更常用):计算物品之间的相似度
物品A与C更相似,用户C买了A,故把物品C推荐给用户C
注意:这里的物体之间的相似度不是看物体本身的相似度,是看物体与用户联系的相似度
相比基于用户的协同过滤,优势:
1 计算性能高,通常用户数量远大于物品数量
2 可预先计算保留,物品不善变
实例:
目标:求出第5个用户对电影1的评分,根据某一阈值,得出要不要给5用户推荐电影1,具体方法如下:
第一步:想要预测某一用户对某一电影的评分,首先要找到与这一电影相似的电影,根据如下的相似度计算得出,结果是上图右边绿色字体,这里用的是皮尔逊相关系数。
如何找相似的用户呢?通过相似度计算:
在推荐系统中常用的是第二种:
第二步:根据皮尔逊相关系数的某一阈值,这里假设是0.4,筛选出与电影1最相近的2个电影,这里是电影3和6,根据此用户对3、6电影的评分,算出得分值,这里是r_51=2.6,最后根据某一阈值,比如是4,若超出阈值则给此用户推荐,明显这个例子并没有超出阈值,所以不推荐
协同过滤总结: