基于协同过滤算法的电影推荐系统.doc

上传人:scccc 文档编号:12060664 上传时间:2021-12-01 格式:DOC 页数:20 大小:327.50KB
返回 下载 相关 举报
基于协同过滤算法的电影推荐系统.doc_第1页
第1页 / 共20页
基于协同过滤算法的电影推荐系统.doc_第2页
第2页 / 共20页
基于协同过滤算法的电影推荐系统.doc_第3页
第3页 / 共20页
基于协同过滤算法的电影推荐系统.doc_第4页
第4页 / 共20页
基于协同过滤算法的电影推荐系统.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《基于协同过滤算法的电影推荐系统.doc》由会员分享,可在线阅读,更多相关《基于协同过滤算法的电影推荐系统.doc(20页珍藏版)》请在三一文库上搜索。

1、WORD格式可编辑高级数据挖掘期末大作业基于协同过滤算法的电影推荐系统本电影推荐系统中运用的推荐算法是基于协同过滤算法(CollaborativeFiltering Recommendation )。协同过滤是在信息过滤和信息系统中正迅速成为 一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相 似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。电影推荐系统中引用了 Apache Mahout提供的一个协同过滤算法的推荐引擎 Taste,它实现了最基本的基于用户和基于内容的推荐算法, 并提

2、供了扩展接口, 使用户方便的定义和实现自己的推荐算法。电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统 根据用户对电影评分的分值,判断用户的兴趣,先运用 UserSimilarity 计算用 户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻 居,最后由Recommende提供推荐个该用户可能感兴趣的电影详细信息。将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。一、Taste 介绍Taste是Apache Mahout提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在 mahout中对一

3、些推荐算法进行了 Map Reduce 编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。在Mahout0.5版本中的Taste,实现了多种推荐算法,其中有最基本的基于 用户的和基于内容的推荐算法,也有比较高效的SlopeO ne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化 开发基于内容或基于模型的个性化推荐算法。Taste不仅仅适用于Java应用程序,还可以作为内部服务器的一个组件以HTTP和WebService的形式向外界提供推荐的逻辑。Taste的设计使它能满足 企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。下

4、图展示了构成Taste的核心组件:Ap p lictLOiiL LaverRcmiu«nder 禺FemL avnrData Store从上图可见,Taste由以下几个主要组件组成:DataModel: DataModel是用户喜好信息的抽象接口,它的具体实现支持从指 定类型的数据源抽取用户喜好信息。在Mahout0.5中,Taste提供 JDBCDataModel和FileDataModel 两种类的实现,分别支持从数据库和文件文 件系统中读取用户的喜好信息。对于数据库的读取支持,在Mahout 0.5中只提 供了对MySQ和PostgreSQL的支持,如果数据存储在其他数据库,或

5、者是把数 据导入到这两个数据库中,或者是自行编程实现相应的类。UserSimilarit 和ItemSimilarity :前者用于定义两个用户间的相似度,后 者用于定义两个项目之间的相似度。 Mahout支持大部分驻留的相似度或相关度 计算方法,针对不同的数据源,需要合理选择相似度计算方法。UserNeighborhood :在基于用户的推荐方法中,推荐的内容是基于找到与当 前用户喜好相似的“邻居用户”的方式产生的,该组件就是用来定义与目标用户 相邻的“邻居用户”。所以,该组件只有在基于用户的推荐算法中才会被使用。Recommender Recommendei是推荐引擎的抽象接口, Tast

6、e中的核心组件。 利用该组件就可以为指定用户生成项目推荐列表。二、相似性度量本章节将系统中用到的几个相似性度量函数作以介绍,taste中已经具体实现了各相似性度量类。User CF和Item CF都依赖于相似度的计算,因为只有 通过衡量用户之间或物品之间的相似度,才能找到用户的“邻居”,才能完成推 荐。下面就对常用的相似度计算方法进行详细的介绍:1.基于皮尔森相关性的相似度Pearson correlation-basedsimilarity皮尔森相关系数反应了两个变量之间的线性相关程度,它的取值在-1, 1之间。当两个变量的线性关系增强时,相关系数趋于1或-1 ;当一个变量增大,另一个变量也

7、增大时,表明它们之间是正相关的,相关系数大于0;如果一个变量增大,另一个变量却减小,表明它们之间是负相关的,相关系数小于0;如果相关系数等于0,表明它们之间不存在线性相关关系用数学公式表示,皮尔森相关系数等于两个变量的协方差除于两个变量的标准差。軌眄一超理(了)J母肿应珂罔J& (严)占气叫=J吃屮_送冇丿吃0_(刀)2畔孙-竽)Pears on correlati on-based similarity协方差(Covarianee):在概率论和统计学中用于衡量两个变量的总体误差。如果两个变量的变化趋于一致,也就是说如果其中一个大于自身的期望值, 另一 个也大于自身的期望值,那么两个变

8、量之间的协方差就是正值; 如果两个变量的 变化趋势相反,则协方差为负值。社冈(尤 F) = E( (X _ 仪)(Y _ mCovaria nee其中u表示X的期望E(X), v 表示丫的期望E(Y)标准差(Standard Deviation ):标准差是方差的平方根1 Ncr= /E(X_E(X)2) = JE(¥) -(E(X)Sta ndard Deviati on方差(Varianee):在概率论和统计学中,一个随机变量的方差表述的是它的离散程度,也就是该变量与期望值的距离。Var(X) =-Varia nee即方差等于误差的平方和的期望基于皮尔森相关系数的相似度有两个缺点

9、:(1)没有考虑(take into aeeount)用户间重叠的评分项数量对相似度的影响;(2)如果两个用户之间只有一个共同的评分项,相似度也不能被计算Item 101Item 102User 15.03.0User 22.02.5User 32.5User 454-User 54.03.0Table1上表中,行表示用户itfrm 103Correlation with User2.51.0005.0-0.764云3,01.0002.00.945(15)对项目(101103)的一些评分值。直观来看,User1和User5用3个共同的评分项,并且给出的评分走差也不大,按理他们之 间的相似度应该

10、比User1和User4之间的相似度要高,可是User1和User4有一 个更高的相似度1同样的场景在现实生活中也经常发生,比如两个用户共同观看了 200部电影, 虽然不一定给出相同或完全相近的评分,他们之间的相似度也应该比另一位只观 看了 2部相同电影的相似度高吧!但事实并不如此,如果对这两部电影,两个用 户给出的相似度相同或很相近,通过皮尔森相关性计算出的相似度会明显大于观 看了相同的200部电影的用户之间的相似度。Mahout对基于皮尔森相关系数的相似度给出了实现,它依赖一个DataModel作为输入。sonCcrr elilionSiKiilut tym:' Pais&

11、TUCcrrelat ionimil ai i ty(Da.talflod«l1ni' FearzanCorr el at icmSiiiular i.ty (Da-taHodcl. tfei ght r n£) PoweredPears on Correlati on Similarity同时,Mahout还针对缺点(1)进行了优化,只需要在构造PearsonCorrelationSimilarity时多传入一个 Weighting.WEIGHTED参数,就能使有更多相同评分项目的用户之间的相似度更趋近于1或-1 0UserSimilaritysimilarity

12、1=newPears on Correlati on Similarity(model);double value1 = similarity1.userSimilarity(1,5);UserSimilarity similarity2 = new Pears on Correlati on Similarity(model,Weighti ng.WEIGHTED);double value2 = similarity2.userSimilarity(1,5);结果:Similarity of User1 and User5: 0.944911182523068Similarity of U

13、ser1 and User5 with weighti ng: 0.96556948907691752.基于欧几里德距离的 相似度EuclideanDistance-basedSimilarity欧几里德距离计算相似度是所有相似度计算里面最简单、最易理解的方法。它以经过人们一致评价的物品为坐标轴,然后将参与评价的人绘制到坐标系上,并计算他们彼此之间的直线距离。Euclidea n Dista nee 2-Coord in atehem 101Item 佃2ItemDistanceSimil arity to LSO30250 000tOOT2.025503.937C203U«r 32

14、 5*2.5000 286User 45.0-300.500c.eer4030201 1160 472Table2图中用户A和用户B分别对项目X、丫进行了评分。用户A对项目X的评分为2,对项目丫的评分为4,表示到坐标系中为坐标点A(1.8, 4);同样用户B对项目X、Y的评分表示为坐标点B(4.5, 2.5),因此他们之间的欧几里德距离(直线距离)为:sqrt(B.x - A.x)A2 + (A.y - B.y)A2)=J(艺3-兀Euclidea n Dista nee计算出来的欧几里德距离是一个大于 0的数,为了使其更能体现用户之间的 相似度,可以把它规约到(0,1之间,具体做法为:1 /

15、 (1 + d)。参见Table2左利(兀y) = -_IEuclidea nDista nce-based Similarity只要至少有一个共同评分项,就能用欧几里德距离计算相似度;如果没有共 同评分项,那么欧几里德距离也就失去了作用。 其实照常理理解,如果没有共同 评分项,那么意味着这两个用户或物品根本不相似。3. 余弦相似度Cosine Similarity余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异 的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。THyIt 丄y) = CO =-训*Cos ine Similarity与欧几里德

16、距离类似,基于余弦相似度的计算方法也是把用户的喜好作为n-维坐标系中的一个点,通过连接这个点与坐标系的原点构成一条直线(向量),两个用户之间的相似度值就是两条直线(向量)间夹角的余弦值。因为连接代表 用户评分的点与原点的直线都会相交于原点,夹角越小代表两个用户越相似,夹角越大代表两个用户的相似度越小。同时在三角系数中,角的余弦值是在卜1, 1 之间的,0度角的余弦值是1,180角的余弦值是-1。借助三维坐标系来看下欧氏距离和余弦相似度的区别:dist(AjB)Dista nee and Cosi ne 3-Coord in ates专业知识分享从图上可以看出距离度量衡量的是空间各点间的绝对距离

17、,跟各个点所在的 位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变, B点朝原方向远离坐标轴原点,那么这个时候余弦相似度eos 0是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相 似度的不同之处。根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的所以更多的用于需数据分析模型:欧氏距离能够体现个体数值特征的绝对差异,要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相 似度或差异;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏

18、感, 更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。Mahout没有专门给出基于余弦相似度的实现。4. 调整余弦相似度Adjusted Cos ine Similarity在余弦相似度的介绍中说到:余弦相似度更多的是从方向上区分差异,而对 绝对的数值不敏感。因此没法衡量每个维数值的差异, 会导致这样一个情况:比 如用户对内容评分,5分制,X和丫两个用户对两个内容的评分分别为(1,2)和 (4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看 X似 乎不喜欢这2个内容,而丫比较喜欢,

19、余弦相似度对数值的不敏感导致了结果的 误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值 都减去一个均值,比如X和丫的评分均值都是3,那么调整后为(-2,-1)和(1,2), 再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合 现实。5. 斯皮尔曼相关Spearman Correlation斯皮尔曼相关性可以理解为是排列后(Rank用户喜好值之间的Pears on相 关度。Mahout in Action中有这样的解释:假设对于每个用户,我们找到他 最不喜欢的物品,重写他的评分值为“ T;然后找到下一个最不喜欢的物品, 重写评分值为“ 2”,以此类推

20、。然后我们对这些转换后的值求Pearson相关系数,这就是Spearman相关系数。斯皮尔曼相关度的计算舍弃了一些重要信息,即真实的评分值。但它保留了用户喜好值的本质特性排序(ordering ),它是建立在排序(或等级,Rank)的基础上计算的。回顾前面表中Userl5对ItemlOl103的喜好(评分)值,通过斯皮尔曼 相关系数计算出的相似度为:Item 101Irem 102hem 103Correction to User 1User 13.02Qto1.0User 21,02.03,0-1,0User 31.0一-一User 42.0一rc1.0User 53.02.01.01.0T

21、able3我们发现,计算出来的相似度值要么是1,要么是-1,因为这依赖于用户的喜好值和User1的喜好值是否趋于“一致变化”还是呈“相反趋势变化"。Mahout对斯皮尔曼相关系数给出了实现,具体可参考Spearma nCorrelatio nSimilarity,它的执行效率不是非常高,因为斯皮尔曼相关性的计算需要花时间计算并存储喜好值的一个排序(Ranks),具体时间取决于数据的数量级大小。正因为这样,斯皮尔曼相关系数一般用于学术研究或者是小 规模的计算。UserSimilaritysimilarity1=newSpearma nCorrelati on Similarity(mo

22、del);/con structa Spearma nCorrelati on-based SimilarityUser1 to User1 : 1.0User2 to User1 : -1.0User3 to Userl : NaNUser4 to Userl : 1.0User4 to Userl : 1.0考虑至USpearman Correlation 的效率, 可以把Spearma nCorrelati on Similarity包装一层 Cache , 具体做 法为:UserSimilarity similarity2= newCachi ngUserSimilarity( new

23、Spearma nCorrelati on Similarity(model), model);这样,每次计算的结果会直接放入Cache,下一次计算的时候可以立即得到结果,而不是重新再计算一次。6.基于谷 本系数 的相似性度量Tanimoto Coefficient-basedSimilarityTanimoto Coefficient和前面的5中相关度计算方式有很大的不同,它不关心用户对物品的具体评分值是多少,它在关心用户与物品之间是否存在关联关系。 Tanimoto Coefficient依赖于用户和物品之间的这种 Boolean关系作为输入。更准确的说法为:Tan imoto Coeff

24、icie nt主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Tanimoto Coefficie nt只关心个体间共同具有的特征是否一致这个问题。Ta nimotoCoefficient又被叫做Jaccard Coefficient,其值等于两个用户共同关联(不管喜欢还是不喜欢)的物品数量除于两个用户分别关联的所有物品数量。In tersectio n/Un io n也就是关联的交集除于关联的并集,用公式表示为:Juvetrr-il( X, V)=X 1Tanim oto/Jac

25、cardCoefficie nt其值介于0,1之间,如果两个用户关联的物品完全相同,交集等于并集,值为1;如果没有任何关联,交集为空,值为0。三、电影推荐系统的实现1. 数据下载:至 U groupie ns 网站(http:/www.grouplens.org/node/12)上下载 Data Sets,在该电影系统中我们使用了将近 900多用户为1683的电影评了近100000行的数 据集。将下载的mi-data_0.zip里的评分数据和电影信息数据取出。将评分文件转换成类似于csv文件格式 的文本文 件,CSV是逗号分隔值 文件(CommaSeparated value),是一种用来存储

26、数据的纯文本文件格式,文件名为rating.TXT。可以用写字板打开,如图4.1 :358.1.1137.1.3B93,1,3631.1.3704,1, 2627.1.2B2,1, 5914.1.4图 4.1 rat in g.txt示意图然后将数据导入到mysql数据库中,将电影数据文件也转换成CSV格式文件, 然后也导入数据库中,Mysql中数据库为movierecommendation,上述两个文件 对应的表分别为movies和rating。由于taste引擎需要频繁进行数据库操作, 所以可以对mysql数据库进行一般的调优,在 mysql安装目录的my.ini文件中 设置一些参数,从而

27、加快数据库操作运行的时间。2. 系统结构:本电影推荐系统前台导航栏有三个菜单,分别为首页,推荐电影,参数设置。首页:首页上显示综合评分最高的前 20部电影,综合评分是指对于一部电影,所 有观看改电影的用户的评分的期望值。实现为在index.jsp页面中调用数据库接 口,查询数据库,然后将结果显示出来:呼分爲脚前M删厚:e 1咆E色CI卜xE315 IWPwT(W:i阿彳甘 f.nrq770 JDwl e 丹 FUija:rsw 119萨 I1 l4l|fBI ftoCHTliLnnJ.r UpMarifl 联.JujWiwni1B6 |Blue£ Brotnersa 12 IKj&a

28、mp;s the £<?fj 1 曲力絳 ihunl 问 FM Cdgr3OS |5«efBros (1903)2殆 jfcisiQ AflstkqiiCiGS»J*D7 丽 tW.爾nnlCkibClMf my54?»唯血p SCO5的理冲 eind ihP iteKti1 f 州3 閃恤 Buts (15&6)卜励11码4.训” & Wi样1参数设置页面:由于协同过滤算法需要设置推荐的参数,在本系统主要是考虑邻居个数和相似度度量函数这两个参数:Hi乩口严电画flr |.在相似性度量下拉列表框中,一共可以选择四种相似度度量类,分别

29、为:基 于欧几里得距离的相似度、基于皮尔森相关性的相似度、基于斯皮尔曼相关的相 似度、基于古本系数的相似性度量。各相关性度量类的说明都在第二章节中有详 细介绍。系统使用application对象保存这些参数设置,并且在web.xml中设置了初始化的值,分别为 6、PearsonCorrelationSimilarity。当用户在该页面设置参数后,将传给 websetting.java servlet,将这些参数保存在 即plication中,并且跳转到推荐电影页面。在sett in g.jsp页面中也使用javascript 验证用户输入数据的合法性。推荐电影页面:MS*:荐店豹ft隹斉用戶号

30、.逬瓷在推荐电影页面,用户首先需要输入用户ID和推荐数,在jsp页面中使用javascript 验证用户输入数据的合法性,用户ID的范围,1到990。推荐数范围 为1到30,如果输入数据非法,将跳转到错误页面:当输入合法参数之后,系统将会将推荐结果展示出来:WQ * 札 1S1B用户ID; 900用口秤肝辻押申宦和唯荐玲该朋匚的电雪忆下1995)rr-nd 5仃日 空o rao*aipg aaoi 1i MylyAptifOdin&iF l&range 0間rs M 的各I|r凸mlnatair 去 Mpmert IDa* 门 英M |MyBery SgntE "Fh

31、Eaie政加(0 he 和owe 1 卿t- j FiahCiytedWdndd7T"piVungTroiffiBn:Hpmdkz be阳加啲日lank i. l99/i"3|5we飙I験吗心剧(1995】nmfScMBlDahnj1CQ2疵H !矿9凹id (mTTpl2rango LessonK加讯盯川:WlCongpwcy TMetry (19971 比ryflwdjy Siqul°卍灯iaffe和空Mf est书 出way Heme f 1卿頁OTToS*wg® Dog脸shrglon &血阻门997) 曲Fisti U曷沪pwng &q

32、uot;Ko ¥0IoIo1Jo17 English Pgliertb?o18 jEvBrwini& Savs 1 L<h*e Vou v 199Si冒厂19 Murder汛TiQD门静和亦上问刊買1 宓brnarjl期)呼22PhfeswrbopD店KLjETJ更巧I5 pnce Opan <1 Tinie別曲 We 呼are O,on?d t的” % D F3trfik<1OwrH-1997lFrqci (16)Bele die 世门 96盯Led M iltoffdirs 1.1 巫15在该页面中,首先输出数据库中总共的用户数,电影数,以及要推荐的用户ID,然后下面左边为用户所有评分过的电影, 右边为给用户推荐的电影。具体实 现见程序源代码。四、总结本系统是基于Apache Mahout的taste所做的一个电影推荐系统,使用的数据为groupie ns网站的990个用户,1618部电影,近10万行的评论数据集。并且使用MySql数据库作为数据源。提供用户参数选择,用户可以设置邻居个数和相似性度量类。最终系统给用户输出用户打分过的电影以及给用户推荐的电影。本系统缺点就是由于频繁的数据库操作, 导致系统性能有待提高。给用户显示结果时间过长,用户交互性不是很好。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1