您的位置:首页 > 其它

协同过滤介绍和简单推荐系统的实现

2016-03-17 11:30 363 查看
本文介绍推荐系统、协同过滤思想,两种基本的相似度衡量,并用python实现。最后就MovieLens数据集上作出简单的推荐。

一、相关知识

(1)推荐系统

如今,推荐系统已经在多方面得到应用,例如淘宝、当当、亚马逊等网站的商品推荐。而个性化推荐系统则是通过发掘用户的兴趣爱好,作出针对性的推荐。个性化推荐的方法较多,最常用的是协同过滤方法,而本文主要讲的也是基于协同过滤的个性化推荐。

(2)协同过滤

协同过滤技术出现于20世纪70年代,到90年代形成较为成熟的理论框架。协同过滤的基本假设是如果用户x和y对n个项目的评价或行为是相似的,那么他们对其他项目所持有的观点也是相似的,即行为相似的用户兴趣也可能相似。

一个协同过滤算法的基本方法是对大批用户进行搜索,从中找出兴趣相似的用户群。算法会对这些人的所偏爱的内容进行考察,然后构造出推荐列表,推荐给该群体的用户。

(3)Python语言

Python语言一种是一种面向对象的解释型语言,具有跨平台、简单实用、扩展性强等特性,数据结构也非常灵活。Python俗称胶水语言,其语法简洁,类库很多,适合快速开发程序。在做爬虫抓取数据和社交网络分析时学的,此处用的版本是python3.2。

二、相似度测量方法

主要有两种:欧几里得距离和皮尔逊相关度(pearson)

(1)数据集

Prefer以字典形式存放用户看过的电影和评分。

[AppleScript] 纯文本查看 复制代码

?
(2)、寻找有相似兴趣的用户,方式是比较各用户的评价数据,计算用户间的相似度。主要方法有2种即欧几里得距离和皮尔逊相关度。

2-1欧几里得距离

使用欧几里得距离计算用户的相似度时,将用户评价的物品作为坐标轴,用户填充到坐标体系中。以二维为例,



上图中,Snakes和Dupree为电影,Toby,Lasclle等人对应的点根据其评分情况被画在相应的位置。这样两者在偏好空间中的距离越近,他们的兴趣就越相似。而此模型可以推广至多维情况。

2-2 Pearson相关度评价

欧几里得距离评价法是一种比较简单的方法。但是由于存在一些用户总是倾向于评分过高或过低(相对平均值),这是兴趣相似的用户并不能通过此方法计算出来。Pearson相关系数是根据两组数据与某一直线的拟合程度来衡量的。



此坐标系以用户为坐标轴,用户所评分的电影显示在对应位置。本方法可修正结果,增强准确性。例如TOM, Lily对电影A,B,C的评分为(2, 4.1, 4), (3, 5, 5 ),则用pearson方法得到两者相似度仍然较高,而欧几里得距离法得到的相似度则偏低。实际上是用户Lily倾向于评分更高。

(3)、编程并测试

#---------------欧几里得空间距离方法---------------

[AppleScript] 纯文本查看 复制代码

?
#-----------------------pearson相关度系数------------------------

[AppleScript] 纯文本查看 复制代码

?
三、获取推荐列表依然以上面的prefer数据集为基础,根据计算结果将兴趣相似的用户评分较高的电影推荐给用户。

(1)获取相似用户

#从用户评价字典中返回Top-K匹配者

#K,相似度函数 为可选参数

[AppleScript] 纯文本查看 复制代码

?
(2)、获取推荐

[AppleScript] 纯文本查看 复制代码

?
四、利用MovieLens公开数据集做推荐

(1)、文件一loadMovieLens.py,加载测试集数据

[AppleScript] 纯文本查看 复制代码

?
(2)、文件二:recommendation.py 做推荐

[AppleScript] 纯文本查看 复制代码

?
(3)利用MovieLens做测试是出现编码错误提示,后来发现时数据集中某行格式不规范,用软件打开u.item,修改下即可。

参考书籍:programing collective intelligence.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: