笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。
我的公众号为:livandata
协同过滤一般是在海量的用户中发掘出一小部分和你品味比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。
协同过滤主要处理三个问题:
- 如何确定一个用户是不是相似品味的?
- 如何将邻居们的喜好组织成一个排序的目录?
实现协同过滤的步骤可以分为三步:
1、收集用户的偏好;
主要通过用户的行为进行判断,用户的行为分为显性行为和隐形行为,
显性行为:用户对商品进行评分、投票、转发、保存书签、标记标签、评论、点击流、购买;
隐形性为:用户的阅读、页面停留时间、收听、观看等。
2、找到相似的用户或物品;
相似性的计算方式也有很多,常用的有两种:
距离计算法:是通过计算空间中点的距离来实现的,常用的距离计算方法为:欧氏距离、棋盘距离、马氏距离、二进制距离等。
相似度与距离是反比,即相似度为距离的倒数。
余弦计算法:即计算两个用户向量的余弦值,余弦越小则越相似。
在算法方面也有一些常用的方法:
K近邻为常用的相似度计算,常用的有两个方法:
1)指定固定的数量的K近邻法,这方法运算小,但是对孤立值比较敏感,如果相近的值不够,则会寻找较远的值;
2)指定距离大小法,这种方法运算较大,但是比较精确;
那么对于大量的用户和物品,如何提取特征,并计算相似度?
构建用户与商品的二位矩阵,买过记为1,没买记为0:
由于u1与u2各自买过一些商品,形成了两个向量,基于用户相似度可以确定两个用户同时购买一个商品称为同现,同现的越多,则用户相似的可能越大;
另外一种方式为基于物品的:
两个物品,被用户同时购买的越多,则物品的相似度越高。
根据上面的两种思想可以将推荐方法分为两类:基于用户的推荐算法UserCF、基于物品的推荐算法ItemCF。
1)基于用户的协同过滤:
通过不同用户对物品的评分来评价用户之间的相似度,基于用户之间的相似性做出推荐。
简单的讲:就是给用户推荐和他兴趣相似的其他用户喜欢的物品。
2)基于物品的协同过滤:
通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。
简单讲:就是给用户推荐和他之前喜欢的物品相似的物品。
有较多的用户同时买AC,则可以相信AC是相似物品,可以给C用户推荐C物品。
UserCF与ItemCF的比较为:这两种方法选择的标准为谁少,用谁的CF比较。
3)计算推荐;
基于物品的协同过滤算法:
第一步:计算物品之间的相似度;
第二步:根据物品的相似度和用户的历史行为给用户生成推荐列表;
案例为:
案例介绍:
需要考虑的因素:
测试数据集:
这一推荐的步骤为:
第一步:构建同现矩阵:按用户分组,找到每个用户所选的物品,单独出现计数及两两一组计数。
矩阵中的行和列都是电影,矩阵中的数据为同现数,比如:【102】【103】所在的数字为3,则表示这两部电影同时出现的次数为3.
这个矩阵表示了各个电影相似的关系,即为常用的相似度衡量。
这个矩阵的理解可以表示为:用户对多个电影的选择相同的次数,如下图,电影102、103两部电影,有1、2、3、4、5五个人选择,他们同时选择两部电影的可能有三个,即:1、2、5,得到同现度为3,即上面矩阵中的一个值。
第二步:建立用户对物品的评分矩阵:
按用户分组,找到每个用户所选的物品及评分,即在网站上,用户给某个电影的评分,比如u3给【101】电影打过2分:
有相似度矩阵,然后有评分矩阵,接下来就可以计算推荐结果:
第三步:矩阵计算推荐结果:
同现矩阵*评分矩阵=推荐结果,即物品向量与用户向量的乘积之和。
这个矩阵的目的是计算某个用户看过的电影与没有看过的电影的相似度,并考虑评分加权的过程,将计算的结果排序,即为推荐的列表。
实点为看过的电影,虚点为没看过的电影。
(101,102)的同现度*用户对101的评价=用户对101的兴趣值。
用户的向量也可以做变换:
U3向量可以变成:
1表示正在看的书,0表示没有在看的书。
然后放在上面的矩阵乘法中相乘,得到第四列的数据,将第四列的数据排序,可以得到推荐列表。
可以得到相似度最高的为(101,104),则可以推荐为:你在看的104这本书,有另外四个客户同时在看101。
算法建好之后,如何评估:
算法的两个常用的指标为:查准率和召回率(查全率):
查全率和查准率是需要相互折中的,一般很难出现两好的模型。
常见的轻量级的协同过滤的策略:
1)slope one算法:
这是一个基本上被放弃的算法,因为他在大数据方面,不能实现实时计算,离线运算时又没有itemCF准确。
2)其他算法: