个性化推荐算法一,看看你的浏览如何被识别~
关于用户-物品评分矩阵
用户-物品的评分矩阵,根据评分矩阵的稀疏程度会有不同的解决方案
-
稠密评分矩阵
-
稀疏评分矩阵
这里先介绍稠密评分矩阵的处理,稀疏矩阵的处理相对会复杂一些,我们到后面再来介绍。
使用协同过滤推荐算法对用户进行评分预测
-
数据集:
目的:预测用户1对物品E的评分
-
构建数据集:注意这里构建评分数据时,对于缺失的部分我们需要保留为None,如果设置为0那么会被当作评分值为0去对待
users = ["User1", "User2", "User3", "User4", "User5"] items = ["Item A", "Item B", "Item C", "Item D", "Item E"] # 用户购买记录数据集 datasets = [ [5,3,4,4,None], [3,1,2,3,3], [4,3,4,3,5], [3,3,1,5,4], [1,5,5,2,1], ]
-
计算相似度:对于评分数据这里我们采用皮尔逊相关系数[-1,1]来计算,-1表示强负相关,+1表示强正相关
pandas中corr方法可直接用于计算皮尔逊相关系数
df = pd.DataFrame(datasets, columns=items, index=users) print("用户之间的两两相似度:") # 直接计算皮尔逊相关系数 # 默认是按列进行计算,因此如果计算用户间的相似度,当前需要进行转置 user_similar = df.T.corr() print(user_similar.round(4)) print("物品之间的两两相似度:") item_similar = df.corr() print(item_similar.round(4))
# 运行结果: 用户之间的两两相似度: User1 User2 User3 User4 User5 User1 1.0000 0.8528 0.7071 0.0000 -0.7921 User2 0.8528 1.0000 0.4677 0.4900 -0.9001 User3 0.7071 0.4677 1.0000 -0.1612 -0.4666 User4 0.0000 0.4900 -0.1612 1.0000 -0.6415 User5 -0.7921 -0.9001 -0.4666 -0.6415 1.0000 物品之间的两两相似度: Item A Item B Item C Item D Item E Item A 1.0000 -0.4767 -0.1231 0.5322 0.9695 Item B -0.4767 1.0000 0.6455 -0.3101 -0.4781 Item C -0.1231 0.6455 1.0000 -0.7206 -0.4276 Item D 0.5322 -0.3101 -0.7206 1.0000 0.5817 Item E 0.9695 -0.4781 -0.4276 0.5817 1.0000
可以看到与用户1最相似的是用户2和用户3;与物品A最相似的物品分别是物品E和物品D。
注意:我们在预测评分时,往往是通过与其有正相关的用户或物品进行预测,如果不存在正相关的情况,那么将无法做出预测。这一点尤其是在稀疏评分矩阵中尤为常见,因为稀疏评分矩阵中很难得出正相关系数。
-
评分预测:
User-Based CF 评分预测:使用用户间的相似度进行预测
关于评分预测的方法也有比较多的方案,下面介绍一种效果比较好的方案,该方案考虑了用户本身的评分评分以及近邻用户的加权平均相似度打分来进行预测:
我们要预测用户1对物品E的评分,那么可以根据与用户1最近邻的用户2和用户3进行预测,计算如下:
最终预测出用户1对物品5的评分为3.91
Item-Based CF 评分预测:使用物品间的相似度进行预测
这里利用物品相似度预测的计算同上,同样考虑了用户自身的平均打分因素,结合预测物品与相似物品的加权平均相似度打分进行来进行预测
我们要预测用户1对物品E的评分,那么可以根据与物品E最近邻的物品A和物品D进行预测,计算如下:
对比可见,User-Based CF预测评分和Item-Based CF的评分结果也是存在差异的,因为严格意义上他们其实应当属于两种不同的推荐算法,各自在不同的领域不同场景下,都会比另一种的效果更佳,但具体哪一种更佳,必须经过合理的效果评估,因此在实现推荐系统时这两种算法往往都是需要去实现的,然后对产生的推荐效果进行评估分析选出更优方案。
基于模型的方法
-
思想
-
通过机器学习算法,在数据中找出模式,并将用户与物品间的互动方式模式化
-
基于模型的协同过滤方式是构建协同过滤更高级的算法
-
-
近邻模型的问题
-
物品之间存在相关性, 信息量并不随着向量维度增加而线性增加
-
矩阵元素稀疏, 计算结果不稳定,增减一个向量维度, 导致近邻结果差异很大的情况存在
-
-
算法分类
-
基于图的模型
-
基于矩阵分解的方法
-
-
基于图的模型
-
基于邻域的模型看做基于图的模型的简单形式
- 原理
-
将用户的行为数据表示为二分图
-
基于二分图为用户进行推荐
-
根据两个顶点之间的路径数、路径长度和经过的顶点数来评价两个顶点的相关性
-
-
-
基于矩阵分解的模型
-
原理
-
根据用户与物品的潜在表现,我们就可以预测用户对未评分的物品的喜爱程度
-
把原来的大矩阵, 近似分解成两个小矩阵的乘积, 在实际推荐计算时不再使用大矩阵, 而是使用分解得到的两个小矩阵
-
用户-物品评分矩阵A是M X N维, 即一共有M个用户, n个物品 我们选一个很小的数 K (K<< M, K<<N)
-
通过计算得到两个矩阵U V U是M * K矩阵 , 矩阵V是 N * K
约等于
类似这样的计算过程就是矩阵分解
-
-
基于矩阵分解的方法
- ALS交替最小二乘
-
ALS-WR(加权正则化交替最小二乘法): alternating-least-squares with weighted-λ –regularization
-
将用户(user)对商品(item)的评分矩阵分解为两个矩阵:一个是用户对商品隐含特征的偏好矩阵,另一个是商品所包含的隐含特征的矩阵。在这个矩阵分解的过程中,评分缺失项得到了填充,也就是说我们可以基于这个填充的评分来给用户做商品推荐了。
-
-
SVD奇异值分解矩阵
- ALS交替最小二乘
-
-
ALS方法
-
ALS的矩阵分解算法常应用于推荐系统中,将用户(user)对商品(item)的评分矩阵,分解为用户对商品隐含特征的偏好矩阵,和商品在隐含特征上的映射矩阵。
-
与传统的矩阵分解SVD方法来分解矩阵R(R∈ℝm×n)不同的是,ALS(alternating least squares)希望找到两个低维矩阵,以 R̃ =XY 来逼近矩阵R,其中 ,X∈ℝm×d,Y∈ℝd×n,这样,将问题的复杂度由O(m*n)转换为O((m+n)*d)。
-
计算X和Y过程:首先用一个小于1的随机数初始化Y,并根据公式求X,此时就可以得到初始的XY矩阵了,根据平方差和得到的X,重新计算并覆盖Y,计算差平方和,反复进行以上两步的计算,直到差平方和小于一个预设的数,或者迭代次数满足要求则停止
-