基于协同过滤算法和内容推荐算法实现电影推荐系统的本电影推荐系统算法是由人人相似的协同过滤算法和基于内容的推荐算法相结合的混合推荐算法
混合推荐算法大致流程:
首先对数据集采用人人相似的协同过滤算法,计算人人与他人的cos相似度,选择相似度最高的人,推荐看的电影。 如果最高相似度小于0.2,则判断没有人相似,用基于内容的推荐算法解决。 如果相似度最高的用户不能推荐加4分的电影,也推荐基于内容的推荐算法。
人人相似的协同过滤算法:
通过movieId集成movies.csv和ratings.csv,得到merged.csv
阅读merge.csv获取data词典。 { userid : { movieid : rating,movieid:rating}}
修改data词典。 具体来说,计算每部电影的平均分数,从该电影的所有评分中减去平均分数,使该电影未评分用户的默认评分为0,从而使计算变得容易
针对各用户计算与其他所有用户的cos类似度,记录类似度最高的用户和两个用户的类似度,最后得到类似度最高的用户列表
对与该用户相似度最高用户的电影进行排名,与该用户的电影进行比较,选择该用户没有看过、得分大于4的电影推荐给该用户
如果最高相似度小于0.2或者最高相似度的用户不能推荐电影,则采用基于内容的推荐算法
基于内容的推荐算法
获取三种类型的数据结构、用户标签偏好列表、不同标签的电影评级顺序和每种类型的电影
用户标签喜爱度列表:
标签喜欢度的计算公式=具有电影原始权重的电影的用户得分时间权重
这里,所属电影的原始权重=1/该电影的标签数
时间权重=时间戳归一化
按标签分列的电影分数排行榜:分数是指每部电影的平均分
数据结构: { tag : [ (移动id,rating ),移动id,rating ) }
每种电影类型:
数据结构: { movieid : } tag : ratio,tag:ratio }}
获取各用户标签喜爱度排名前2位的标签和它们的权重,根据权重计算该标签推荐的电影数,在不同标签的电影评分排名的数据结构中找到该标签下的前2位的电影进行推荐
代码下载:电影推荐系统