协同过滤推荐算法与应用(21页).docx
《协同过滤推荐算法与应用(21页).docx》由会员分享,可在线阅读,更多相关《协同过滤推荐算法与应用(21页).docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-第 1 页协同过滤推荐算法与应用-第 2 页机器学习算法 day03_协同过滤推荐算法及应用课程大纲课程大纲协同过滤推荐算法原理协同过滤推荐算法概述协同过滤推荐算法思想协同过滤推荐算法分析协同过滤推荐算法要点协同过滤推荐算法实现协同过滤推荐算法案例案例需求数据规整参数设定用 Scikili 机器学习算法库实现算法检验实现推荐协同过滤推荐算法补充计算距离的数学公式协同过滤算法常见问题课程目标:1、理解协同过滤算法的核心思想2、理解协同过滤算法的代码实现3、掌握协同过滤算法的应用步骤:数据处理、建模、运算和结果判定-第 3 页1.CF 协同过滤推荐协同过滤推荐算法算法原理原理1.1 概述概述什么
2、是协同过滤(Collaborative Filtering,简称 CF)?首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。协同过滤算法又分为基于用户基于用户的协同过滤算法和基于物品基于物品的协同过滤算法1.2 案例需求案例需求如下数据是各用户对各文档的偏好:用户/文档文档A文档B文档C文档D用户A推荐?推荐?用户B用户C用户D现在需要基于上述数据,给 A 用户推荐一篇文档1.3 算法分析算法分析1.3.1 基于用户相似度的分析基于
3、用户相似度的分析直觉分析:“用户 A/B”都喜欢物品 A 和物品 B,从而“用户用户 A/B”的口味最为相近的口味最为相近因此,为“用户 A”推荐物品时可参考“用户 B”的偏好,从而推荐 D这种就是基于用户的协同过滤算法 UserCF 指导思想-第 4 页1.3.2 基于物品相似度的分析基于物品相似度的分析直觉分析:物品组合(A,D)被同时偏好出现的次数最多,因而可以认为 A/D 两件物品的相似两件物品的相似度最高度最高,从而,可以为选择了 A 物品的用户推荐 D 物品这种就是基于物品的协同过滤算法 ItemCF 指导思想1.4 算法要点算法要点1.4.1、指导思想、指导思想这种过滤算法的有效
4、性基础在于:1、用户偏好具有相似性,即用户可分类。这种分类的特征越明显,推荐准确率越高2、物品之间具有相似性,即偏好某物品的人,都很可能也同时偏好另一件相似物品1.4.2、两种两种 CF 算法适用的场景算法适用的场景什么情况下使用哪种算法推荐效果会更好?不同环境下这两种理论的有效性也不同,应用时需做相应调整。a.如豆瓣上的文艺作品,用户对其的偏好程度与用户自身的品位关联性较强;适合 UserCFb.而对于电子商务网站来说,商品之间的内在联系对用户的购买行为影响更为显著。1.5 算法实现算法实现总的来说,要实现协同过滤,需要一下几个步骤:1收集用户偏好2找到相似的用户或物品3计算推荐1.5.1
5、收集用户偏好收集用户偏好用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进-第 5 页行介绍:用户行为类型特征作用评分显式整数量化值0,n可以得到精确偏好投票显式布尔量化值 0|1可以得到精确偏好转发显式布尔量化值 0|1可以得到精确偏好保存书签显式布尔量化值 0|1可以得到精确偏好标记书签 Tag显式一些单词需要进一步分析得到偏好评论显式一些文字需要进一步分析得到偏好点击流隐式一组点击记录需要进一步分析得到偏好页面停留时间隐式一组时间信息噪音偏大,不好利用购买隐式布尔量化值 0|1可以得到精确偏好1.5.2 原始偏好数据的预处理原始偏好数据的预处理用户行为识别/
6、组合在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,比如,可以将用户行为分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户/物品相似度。类似于当当网或者京东给出的“购买了该图书的人还购买了.”,“查看了图书的人还查看了.”喜好程度加权根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。数据减噪和归一化。1减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用
7、户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。-第 6 页2归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。但可以想象,不同行为的数据取值可能相差很大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们进行归一化处理。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 0,1 范围中。形成用户偏好矩阵一般是二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 0,1或者
8、-1,1 的浮点数值。1.5.3 找到相似用户或物品找到相似用户或物品当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐,这就是最典型的 CF 的两个分支:基于用户的 CF 和基于物品的 CF。这两种方法都需要计算相似度,下面我们先看看最基本的几种计算相似度的方法。1.5.4 相似度的计算相似度的计算相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。在推荐的场景中,在用户-物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将
9、所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。CF 的常用方法有三种,分别是欧式距离法、皮尔逊相关系数法、余弦相似度法。的常用方法有三种,分别是欧式距离法、皮尔逊相关系数法、余弦相似度法。为了测试算法,给出以下简单的用好偏好数据矩阵:行表示三名用户,列表示三个品牌,对品牌的喜爱度按照 15 增加。用户苹果小米魅族zhangsan552Lisi354wangwu125(1 1)欧氏距离法欧氏距离法-第 7 页就是计算每两个点的距离,比如 Nike 和 Sony 的相似度。数值越小,表示相似度越高。def OsDistance(vector1,vector2):sqDiffVecto
10、r=vector1-vector2sqDiffVector=sqDiffVector*2sqDistances=sqDiffVector.sum()distance=sqDistances*0.5return distance(2 2)皮尔逊相关系数)皮尔逊相关系数两个变量之间的相关系数越高,从一个变量去预测另一个变量的精确度就越高,这是因为相关系数越高,就意味着这两个变量的共变部分越多,所以从其中一个变量的变化就可越多地获知另一个变量的变化。如果两个变量之间的相关系数为 1 或-1,那么你完全可由变量 X 去获知变量 Y 的值。当相关系数为 0 时,X 和 Y 两变量无关系。当 X 的值增大
11、,Y 也增大,正相关关系,相关系数在 0.00 与 1.00 之间当 X 的值减小,Y 也减小,正相关关系,相关系数在 0.00 与 1.00 之间当 X 的值增大,Y 减小,负相关关系,相关系数在-1.00 与 0.00 之间当 X 的值减小,Y 增大,负相关关系,相关系数在-1.00 与 0.00 之间相关系数的绝对值越大,相关性越强,相关系数越接近于 1 和-1,相关度越强,相关系数越接近于 0,相关度越弱。在 python 中用函数 corrcoef 实现,具体方法见参考资料(3 3)余弦相似度)余弦相似度通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0 度角的余弦值是
12、 1,而其他任何角度的余弦值都不大于 1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为 1;-第 8 页两个向量夹角为 90时,余弦相似度的值为 0;两个向量指向完全相反的方向时,余弦相似度的值为-1。在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相似度通常用于两个向量的夹角小于 90之内,因此余弦相似度的值为 0 到 1 之间。def cosSim(inA,inB):num=float(inA.T*inB)denom=la.norm(inA)*la.norm(inB)return 0.5+
13、0.5*(num/denom)注:本课程的实战案例基于皮尔逊相关系数法皮尔逊相关系数法实现1.5.3 计算推荐计算推荐UserCFUserCF 基于用户相似度的推荐基于用户相似度的推荐计算推荐的过程其实就是 KNN 算法的计算过程ItemCFItemCF 基于物品相似度的推荐基于物品相似度的推荐算法思路1.构建物品的同现矩阵2.构建用户对物品的评分矩阵3.通过矩阵计算得出推荐结果推荐结果=用户评分矩阵*同现矩阵实质:计算各种物品组合的出现次数实质:计算各种物品组合的出现次数2.CF 协同过滤算法协同过滤算法 Python 实战实战2.1 电影推荐需求电影推荐需求根据一个用户对电影评分的数据集来
14、实现基于用户相似度基于用户相似度的协同过滤算法推荐,相似度的算法采用皮尔逊相关系数法皮尔逊相关系数法-第 9 页数据样例如下:用户 ID:电影 ID:评分:时间1:1193:5:9783007601:661:3:9783021091:914:3:9783019681:3408:4:9783002751:2355:5:9788242911:1197:3:9783022681:1287:5:9783020391:2804:5:9783007191:594:4:9783022681:919:4:9783013682.2 算法实现算法实现本案例使用的数据分析包为 pandas,Numpy 和 matp
15、lotlib2.2.1 数据规整数据规整首先将评分数据从 ratings.dat 中读出到一个 DataFrame 里:import pandas as pd from pandas import Series,DataFrame rnames=user_id,movie_id,rating,timestamp ratings=pd.read_table(rratings.dat,sep=:,header=None,names=rnames)ratings:3user_idmovie_idratingtimestamp-第 10 页0111935978300760116613978302109
16、2191439783019683 rows x 4 columnsratings 表中对我们有用的仅是 user_id、movie_id 和 rating 这三列,因此我们将这三列取出,放到一个以 user 为行,movie 为列,rating 为值的表 data 里面。data=ratings.pivot(index=user_id,columns=movie_id,values=rating)#形成一个透视表 data:5可以看到这个表相当得稀疏,填充率大约只有 5%,接下来要实现推荐的第一步是计算 user之间的相关系数2.2.2 相关度测算相关度测算DataFrame 对象有一个很亲切
17、的方法:.corr(method=pearson,min_periods=1)方法,可以对所有列互相计算相关系数。其中:method 默认为皮尔逊相关系数,min_periods 参数,这个参数的作用是设定计算相关系数时的最小样本量,低于此值的一对列将不进行运算。这个值的取舍关系到相关系数计算的准确性,这个值的取舍关系到相关系数计算的准确性,因此有必要先来确定一下这个参数。2.2.3min_periods 参数测定参数测定测定这样一个参数的基本方法:统计在 min_periods 取不同值时,相关系数的标准差大小,越小越好相关系数的标准差大小,越小越好;但同时又要考虑到,我们的样本空间十分稀疏
18、,min_periods 定得太高会导致出来的结果集太小,所以只能选定一个折中的值。这里我们测定评分系统标准差的方法为:-第 11 页在 data 中挑选一对重叠评分最多的用户,用他们之间的相关系数的标准差去对整体标准差做点估计。在此前提下对这一对用户在不同样本量下的相关系数进行统计,观察其标准差变化。首先,要找出重叠评分最多的一对用户。我们新建一个以 user 为行列的方阵 foo,然后挨个填充不同用户间重叠评分的个数:foo=DataFrame(np.empty(len(data.index),len(data.index),dtype=int),index=data.index,colu
19、mns=data.index)#print(empt.shape):(6040,6040)for i in foo.index:for j in foo.columns:foo.ixi,j=data.ixidata.ixj.notnull().dropna().count()这段代码特别费时间,因为最后一行语句要执行 4000*4000=1600 万遍;找到的最大值所对应的行列分别为 424 和 4169,这两位用户之间的重叠评分数为 998:for i in foo.index:foo.ixi,i=0#先把对角线的值设为 0 ser=Series(np.zeros(len(foo.index
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 协同 过滤 推荐 算法 应用 21
限制150内