Top-N Recommendation——基于电影(Item)的推荐
2016-03-04 12:33
295 查看
注:
1. 数据集来源MovieLens
2. 源代码在末尾附上
1:表示电影ID; Toy Story(1995)表示电影名 ;Animation|Children’s|Comedy :表示标签
因此可以用一个向量表来表示该电影的信息:
附注: 0 表示电影没有该标签 , 1 表示电影有该标签
首先生成一个电影的信息矩阵(N*M),然后对于每一个部电影,使用相似度计算的公式,将该电影与其余N-1部电影做相似计算,然后再对相似度进行排序,推荐前Top-10的电影。
相似度:
公式:
本实验采用的是Cosine相似度:
原理:多维空间两点与所设定的点形成夹角的余弦值。
范围:【-1,1】,值越大,说明夹角越小,两点相距越近,相似度就越高。
说明:Cosine相似度被广泛应用于计算文档的数据的相似度,本实验是基于标签的电影推荐,因此采用了该公式来计算两个电影之间标签集的相似度,以此来代表两部电影的相似度。
TF-IDF算法(计算某个标签对于该电影的权重)
由于MovieLens里面的Movie数据只给出了电影的标签(如下),但是并没有给出该标签用户的点击量,因此无法对该标签在本电影中的权重进行计算。因此,本实验没有用TF-IDF计算词频,确定标签权重的步骤。
在这里我们随机选取了三部电影,将其电影的Top-10推荐以及它的相似度打印出来,以便分析比较。
Movie1:
Movie2:
Movie3:
本实验存在一个问题:
有些电影其推荐列表的电影相似度全部都是1,,如电影2 GoldenEye ,其标签为:Action|Adventure|Thiriller ,推荐列表中的电影标签与其完全相同,这是不太符合实际的。
原因
主要问题在于MovieLens数据集中并没有对每一个标签的点击量进行说明,无法通过TF-IDF算法计算标签在电影中的权重,但是实际情况下,每一部电影的标签都会有一个点击量,作为该标签与该电影相关程度的反映。因此对于一部电影,它的某一个标签的权重无法衡量,因此不能区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重都相同,导致了拥有相同标签的电影其相似100%。
解决方案
每一部电影的标签都会有一个点击量,通过IF-IDF算法计算其权重,作为该标签与该电影相关程度的反映。用以区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重各有不同,那么便不会出现上述的问题。
总体来说,本实验基于item-based思想,通过相似度计算,生成电影的top-N 推荐序列。虽然数据上存在一些问题,但是总体上还是完成了推荐的目的。
1. 数据集来源MovieLens
2. 源代码在末尾附上
一、Introduction
无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens的电影数据集,对电影做出Top-N 推荐。主要目的是基于Item-Based的思想来进行Top-10的相关电影推荐。二、Methodology
本实验基于Item-Based 的思路,计算电影的相似度,对每部电影都生成一个它与其他电影的相似度的序列(按顺序排列),然后从中得到Top-10的电影来作为该部电影的相关推荐电影集。在MovieLens中的数据格式如下:1::Toy Story (1995)::Animation|Children's|Comedy
1:表示电影ID; Toy Story(1995)表示电影名 ;Animation|Children’s|Comedy :表示标签
因此可以用一个向量表来表示该电影的信息:
附注: 0 表示电影没有该标签 , 1 表示电影有该标签
对每一部电影,计算它与其他电影的相似度,生成一个相似度的有序序列。N部电影生成N个有序序列,因此对每一部电影都有一个单独的推荐列表。
三、Trading Algorithm
Item-Based:首先生成一个电影的信息矩阵(N*M),然后对于每一个部电影,使用相似度计算的公式,将该电影与其余N-1部电影做相似计算,然后再对相似度进行排序,推荐前Top-10的电影。
相似度:
公式:
本实验采用的是Cosine相似度:
原理:多维空间两点与所设定的点形成夹角的余弦值。
范围:【-1,1】,值越大,说明夹角越小,两点相距越近,相似度就越高。
说明:Cosine相似度被广泛应用于计算文档的数据的相似度,本实验是基于标签的电影推荐,因此采用了该公式来计算两个电影之间标签集的相似度,以此来代表两部电影的相似度。
TF-IDF算法(计算某个标签对于该电影的权重)
由于MovieLens里面的Movie数据只给出了电影的标签(如下),但是并没有给出该标签用户的点击量,因此无法对该标签在本电影中的权重进行计算。因此,本实验没有用TF-IDF计算词频,确定标签权重的步骤。
四、Result
为了验证结果,将电影的信息和相似度打印出来。在这里我们随机选取了三部电影,将其电影的Top-10推荐以及它的相似度打印出来,以便分析比较。
Movie1:
Movie2:
Movie3:
五、Conclusion
结果证明,对于每一部电影,都输出了一个推荐序列,而且按照相似度排列的Top-N推荐。列如, 电影1:它的标签是 Action|Adventrue|Romance ,在它的Top-10推荐列表中,按照相似度从大到小推荐。本实验存在一个问题:
有些电影其推荐列表的电影相似度全部都是1,,如电影2 GoldenEye ,其标签为:Action|Adventure|Thiriller ,推荐列表中的电影标签与其完全相同,这是不太符合实际的。
原因
主要问题在于MovieLens数据集中并没有对每一个标签的点击量进行说明,无法通过TF-IDF算法计算标签在电影中的权重,但是实际情况下,每一部电影的标签都会有一个点击量,作为该标签与该电影相关程度的反映。因此对于一部电影,它的某一个标签的权重无法衡量,因此不能区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重都相同,导致了拥有相同标签的电影其相似100%。
解决方案
每一部电影的标签都会有一个点击量,通过IF-IDF算法计算其权重,作为该标签与该电影相关程度的反映。用以区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重各有不同,那么便不会出现上述的问题。
总体来说,本实验基于item-based思想,通过相似度计算,生成电影的top-N 推荐序列。虽然数据上存在一些问题,但是总体上还是完成了推荐的目的。
点击此处下载源代码
相关文章推荐
- 运用opencv计算特征向量
- shell脚本面试题
- JDK1.7+Tomcat6.0+MyEclipse8.6在win7下的安装与配置
- Linux内核分析:实验二
- Linux下redmine的部署
- 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下
- Top-N Recommendation——基于用户的推荐实验
- linux安装windows常用中文字体库
- Hadoop的Partitioner
- Sqoop 安装指南
- Apache shutdown unexpectedly启动错误解决方法
- scp总结
- photoshop绘制空心圆和实心圆方法图解
- 欺诈网站都注重用户体验!你,还在等什么?!
- The Command Line Crash Course-命令行速成课程
- Linux搭建SVN 服务器
- Python模块:optparse 处理命令行参数
- 欺诈网站都注重用户体验!你,还在等什么?!
- linux 系统权限 数字含义
- mac 终端(terminal) 启动tomcat