人以群分 – 基于用户的协同过滤(User Collaborative Filtering,简称User CF)
生活中可能有这样的朋友:他喜欢的书、电影,你也喜欢;
他喜欢的衣服款式、美食餐厅你也十分推崇;
……
基本原理:
- 通过用户对不同内容(物品)的行为,来评测用户之间的相似性,找到“邻居”基于这种相似性做出推荐:
- 这种推荐的本质是,给相似的用户推荐其他用户喜欢的内容;
- 这就是我们经常看到的:和你类似的人还喜欢如下内容。
基本方法:
① 找到和目标用户兴趣相似的用户集合(关键在于计算两个用户之间的兴趣相似度);
② 找到这个集合中的用户所喜欢的,并且目标用户没有听说过的物品推荐给目标用户。
如何找到和你相似的人?
类比于KNN中K个“邻居”的寻找方法——通过距离衡量相近程度。
闵 科 夫 斯 基 距 离 闵科夫斯基距离 闵科夫斯基距离
用户相似性计算指标:
皮尔逊相关系数
余弦相关系数
杰卡德相关系数
User CF步骤
• 读入用户评分
• 计算用户相似性
• 根据用户相似性排序选择前K个邻居
• 根据K个邻居的评分项目预测用户评分
• 选择预测评分最高的前N个项目作为推荐列表
代码实现
import numpy as np
import pandas as pd
#读取数据文档
df = pd.read_csv('example.csv')
df.head()
#建立关系矩阵rating
dfpivot= df.pivot_table(index="用户id",columns="物品id",values="评分",fill_value=0)
dfpivot
#获取关系矩阵
freq_matrix = dfpivot.values
freq_matrix
array([[1, 0, 2, 0, 0, 1],
[0, 0, 4, 2, 0, 0],
[3, 5, 0, 4, 4, 3],
[0, 4, 1, 0, 3, 0],
[0, 0, 2, 5, 4, 3],
[5, 0, 0, 0, 2, 0],
[0, 4, 3, 0, 0, 0],
[0, 0, 0, 4, 0, 2],
[5, 0, 4, 0, 0, 0],
[0, 2, 3, 0, 0, 0],
[4, 1, 5, 2, 2, 4],
[0, 3