头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

在上一篇 中,简单介绍了热度推荐、协同过滤、内容推荐的算法概述,此篇主要分享协同过滤算法中基于用户的协同过滤算法Python实现。

基于用户的协同过滤算法概述

可以简单理解为"人以群分"的算法解释,通过海量数据中人的历史行为,计算人相互之间的相似度,然后将与你相似的人喜欢的物品推荐给你。

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

基于用户的协同过滤

上图示意出基于用户的协同过滤推荐机制的基本原理,假设Charles 喜欢文章A/B,Mark喜欢文章A/B/C,Bill喜欢文章C;从这些用户的历史喜好记录中,我们可以发现Charles 和Mark的偏好是比较相似的,同时Mark还喜欢文章C,那么我们可以推断Charles可能也喜欢文章C,因此可以将文章C推荐给Charles。

相似度的几种度量方式

此篇中只应用相对常见的几种相似度度量算法,如欧几里得距离、皮尔逊相似度、余弦相似度。

这几种度量方法的区别可以看下我的另一篇文章 。

其中皮尔逊相似度可以简单的看做是升级版本的欧几里得度量算法,因为它提供了对于变量度量单位不同的处理步骤。因此对不同变量间的取值范围没有要求。是以拟合的方法来判断两个数据的相关性,和欧式方法相比更适合数据不是很规范的情况。

数据处理

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

欧几里得距离

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

皮尔逊相似度

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

余弦相似度

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

有兴趣的可以了解下修正后的余弦相似度计算方式,主要解决余弦相似度仅考虑向量维度方向上的相似而没考虑到各个维度的量纲的差异性,所以在计算相似度的时候,做了每个维度减去均值的修正操作。

基于用户的协同过滤推荐算法实现步骤

  • 格式化数据 获取movies和ratings
  1. 转换成数据userDict表示某个用户的所有电影的评分集合,并对评分除以5进行归一化
  2. 转换成数据ItemUser表示某部电影参与评分的所有用户集合
  • 计算所有与userId有交集的用户相似度
  1. 尝试余弦相似度度
  2. 皮尔逊相似度
  3. 欧几里德距离
  • 根据相似度生成推荐电影列表
  • 计算推荐准确率
  • 输出推荐列表

基于用户的协同过滤推荐的算法Python实现

初始化CollaborativeFitering类属性

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

数据标准化处理

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

计算用户相似度

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

获取用户推荐列表(包含自己已经看过的电影,此函数返回值用于计算准确率)

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

计算推荐准确率

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

获取用户推荐列表(不包含已经看的电影)

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

三种不同相似度的推荐准确率结果

随机了几个用户 分别用三种相似度度量方式进行下推荐准确率测试,如下:

头条推荐算法——协同过滤、内容推荐算法介绍与Python实现(二)

附测试数据下载地址,下载ml-1m.zip数据:http://grouplens.org/datasets/movielens/

后续文章中将详细介绍基于物品协同过滤算法、内容推荐算法的python实现,感兴趣的可以关注哦。


分享到:


相關文章: