相关信息
电影推荐系统中运用的推荐算法是基于协同过滤算法(Collaborative Filtering Recommendation)。协同过滤是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。
电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。
电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统根据用户对电影评分的分值,判断用户的兴趣,先运用UserSimilarity计算用户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻居,最后由Recommender提供推荐个该用户可能感兴趣的电影详细信息。将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。
Taste的组织结构:
Taste的组织结构如下图所示:
应用层
----------------------------------------------------------------------------------------
推荐系统层
---------------------------------------------------------------------------------------------------
数据存储层
Taste的组织结构图
Taste 由以下五个主要的组件组成:
DataModel:DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
UserSimilarity 和 ItemSimilarity:UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。 ItemSimilarity类似的,计算内容之间的相似度。
UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。
Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,使用GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
电影推荐系统的实现:
1. 数据下载:
到grouplens网站(http://www.grouplens.org/node/12)上下载Data Sets,在该电影系统中我们使用了将近900多用户为1683的电影评了近100000行的数据集。将下载的ml-data_0.zip里的评分数据和电影信息数据取出。将评分文件转换成类似于csv文件格式的文本文件,CSV是逗号分隔值文件(Comma Separated value),是一种用来存储数据的纯文本文件格式,文件名为rating.TXT。可以用写字板打开,如图4.1:
图4.1 rating.txt示意图
将电影数据文件转换成movies.xml文件,扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据。如图4.2:
图4.2 movies.xml示意图
2. 运行
将以上两个文件放入C盘,用Myeclipse加载该web project—movies运行。在首页输入用户号userid以及推荐电影数countr。例如:输入userId:500 count:50.