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

上传人:11****ws 文档编号:2171331 上传时间:2019-05-01 格式:DOCX 页数:15 大小:634.52KB
下载 相关 举报
基于协同过滤算法的电影推荐系统.docx_第1页
第1页 / 共15页
基于协同过滤算法的电影推荐系统.docx_第2页
第2页 / 共15页
基于协同过滤算法的电影推荐系统.docx_第3页
第3页 / 共15页
基于协同过滤算法的电影推荐系统.docx_第4页
第4页 / 共15页
基于协同过滤算法的电影推荐系统.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

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

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

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

4、扩展性等方面的要求。下图展示了构成 Taste 的核心组件:从上图可见,Taste 由以下几个主要组件组成:DataModel: DataModel 是用户喜好信息的抽象接口,它的具体实现支持从指定类型的数据源抽取用户喜好信息。在 Mahout0.5 中,Taste 提供 JDBCDataModel 和 FileDataModel 两种类的实现,分别支持从数据库和文件文件系统中读取用户的喜好信息。对于数据库的读取支持,在 Mahout 0.5 中只提供了对 MySQL 和 PostgreSQL 的支持,如果数据存储在其他数据库,或者是把数据导入到这两个数据库中,或者是自行编程实现相应的类。Us

5、erSimilarit 和 ItemSimilarity:前者用于定义两个用户间的相似度,后者用于定义两个项目之间的相似度。Mahout 支持大部分驻留的相似度或相关度计算方法,针对不同的数据源,需要合理选择相似度计算方法。UserNeighborhood:在基于用户的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的,该组件就是用来定义与目标用户相邻的“邻居用户” 。所以,该组件只有在基于用户的推荐算法中才会被使用。Recommender:Recommender 是推荐引擎的抽象接口, Taste 中的核心组件。利用该组件就可以为指定用户生成项目推荐列表。二、相似性

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

7、个变量增大,另一个变量却减小,表明它们之间是负相关的,相关系数小于 0;如果相关系数等于 0,表明它们之间不存在线性相关关系。用数学公式表示,皮尔森相关系数等于两个变量的协方差除于两个变量的标准差。Pearson correlation-based similarity协方差(Covariance):在概率论和统计学中用于衡量两个变量的总体误差。如果两个变量的变化趋于一致,也就是说如果其中一个大于自身的期望值,另一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,则协方差为负值。Covariance其中 u 表示 X 的期望 E(X), v 表示 Y 的期望

8、E(Y)标准差(Standard Deviation):标准差是方差的平方根Standard Deviation方差(Variance):在概率论和统计学中,一个随机变量的方差表述的是它的离散程度,也就是该变量与期望值的距离。Variance即方差等于误差的平方和的期望基于皮尔森相关系数的相似度有两个缺点:(1) 没有考虑( take into account)用户间重叠的评分项数量对相似度的影响;(2) 如果两个用户之间只有一个共同的评分项,相似度也不能被计算Table1上表中,行表示用户(15)对项目(101103)的一些评分值。直观来看,User1 和 User5 用 3 个共同的评分项

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

10、CorrelationSimilarity同时,Mahout 还针对缺点(1)进行了优化,只需要在构造PearsonCorrelationSimilarity 时多传入一个 Weighting.WEIGHTED 参数,就能使有更多相同评分项目的用户之间的相似度更趋近于 1 或-1。UserSimilarity similarity1 = new PearsonCorrelationSimilarity(model);double value1 = similarity1.userSimilarity(1, 5);UserSimilarity similarity2 = new PearsonC

11、orrelationSimilarity(model, Weighting.WEIGHTED);double value2 = similarity2.userSimilarity(1, 5);结果:Similarity of User1 and User5: 0.944911182523068Similarity of User1 and User5 with weighting: 0.96556948907691752. 基于欧几里德距离的相似度 Euclidean Distance-based Similarity欧几里德距离计算相似度是所有相似度计算里面最简单、最易理解的方法。它以经过

12、人们一致评价的物品为坐标轴,然后将参与评价的人绘制到坐标系上,并计算他们彼此之间的直线距离。Euclidean Distance 2-CoordinateTable2图中用户 A 和用户 B 分别对项目 X、Y 进行了评分。用户 A 对项目 X 的评分为 2,对项目 Y 的评分为 4,表示到坐标系中为坐标点 A(1.8, 4);同样用户B 对项目 X、Y 的评分表示为坐标点 B(4.5, 2.5),因此他们之间的欧几里德距离(直线距离)为:sqrt(B.x - A.x)2 + (A.y - B.y)2)Euclidean Distance计算出来的欧几里德距离是一个大于 0 的数,为了使其更能

13、体现用户之间的相似度,可以把它规约到(0, 1之间,具体做法为:1 / (1 + d)。参见 Table2Euclidean Distance-based Similarity只要至少有一个共同评分项,就能用欧几里德距离计算相似度;如果没有共同评分项,那么欧几里德距离也就失去了作用。其实照常理理解,如果没有共同评分项,那么意味着这两个用户或物品根本不相似。3. 余弦相似度 Cosine Similarity余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。Cosine Similarity与欧几里德

14、距离类似,基于余弦相似度的计算方法也是把用户的喜好作为n-维坐标系中的一个点,通过连接这个点与坐标系的原点构成一条直线(向量) ,两个用户之间的相似度值就是两条直线(向量)间夹角的余弦值。因为连接代表用户评分的点与原点的直线都会相交于原点,夹角越小代表两个用户越相似,夹角越大代表两个用户的相似度越小。同时在三角系数中,角的余弦值是在-1, 1之间的, 0 度角的余弦值是 1,180 角的余弦值是-1。借助三维坐标系来看下欧氏距离和余弦相似度的区别:Distance and Cosine 3-Coordinates从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体

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

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

17、敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如 X 和 Y 的评分均值都是 3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。5. 斯皮尔曼相关 Spearman Correlation斯皮尔曼相关性可以理解为是排列后(Rank)用户喜好值之间的 Pearson 相关度。 Mahout in Action中有这样的解释:假设对于每个用户,我们找到他最不喜欢的物品,重写他的评分值为“1” ;然后找到下一个最不喜欢的物品,重写评分值为“2” ,以此类推。然后我们对这些转换后的值求 Pearson 相关系数,这就是 Spearman 相关系数。斯皮尔曼相关度的计算舍弃了一些重要信息,即真实的评分值。但它保留了用户喜好值的本质特性排序(ordering ) ,它是建立在排序(或等级,Rank)的基础上计算的。回顾前面表中 User15 对 Item101103 的喜好(评分)值,通过斯皮尔曼相关系数计算出的相似度为:Table3我们发现,计算出来的相似度值要么是 1,要么是-1,因为这依赖于用户的喜好值和 User1 的喜好值是否趋于 “一致变化”还是呈 “相反趋势变化“。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。