协同过滤推荐 公式梳理



1 距离定义

11、欧几里德距离(Euclidean Distance

1.2、皮尔逊相关系数(Pearson CorrelationCoefficient

皮尔逊相关系数一般用于计算两个定距离变脸间联系的紧密程度,它的取值在[-1,1]之间

1.3Cosine 相似度(Cosine Similarity

Cosine 相似度被广泛应用于计算文档数据的相似度:

 

1.4  Tanimoto 系数(Tanimoto Coefficient

Tanimoto 系数也称为 Jaccard 系数,是 Cosine 相似度的扩展,也多用于计算文档数据的相似度:

 

 

 

 

2. 预测准确度

2.1评分预测

评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。对于

测试集中的一个用户u和物品i,令rui是用户u对物品i的实际评分,而ˆui r 是推荐算法给出的预测评

分,那么RMSE的定义为:


MAE采用绝对值计算预测误差,它的定义为

 

假设我们用一个列表records存放用户评分数据,令records[i] = [u,i,rui,pui],其

rui是用户u对物品i的实际评分,pui是算法预测出来的用户u对物品i的评分,那么下面的代

码分别实现了RMSEMAE的计算过程。

def RMSE(records):
   
returnmath.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records])/float(len(records)))
def MAE(records):
   
returnsum([abs(rui-pui) foru,i,rui,pui inrecords])/ float(len(records))

 

2.2 TopN推荐

#python 代码

def PrecisionRecall(test, N):

    hit = 0

    n_recall = 0

    n_precision = 0

    for user, items in test.items():

    rank = Recommend(user, N) #用户推荐API 根据传入的用户id 和返回的推荐结果数,进行推荐

    hit += len(rank & items) #对推荐列表和用户真实列表取交集,并计算交集的物品数

    n_recall += len(items)

    n_precision += N

    return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]

有的时候,为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N

计算出一组准确率/召回率,然后画出准确率/召回率曲线(precision/recall curve)。

 

2.3. 覆盖率

覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力

推荐系统能够推荐出来的物品占总物品集合的比例

3. als计算公式

说明: Matrix Factorization

上述 Iterate 公式含义,是对矩阵的 的求解:

表示 i用户对j item的真实打分;

Nbrs(i) 指的是用户i所评分的产品列表。

:表示取产品列表中的一个产品

是为了防止过度拟合,加上正则化参数。

f[j] 代表产品j的特征向量

f[i] 代表用户i的特征向量

w 表示求解的用户特征向量,使得f[i] 最小

 

 

********************************************************************************************************************************************************************************************************************

但是这里之前问题还是存在,就是用户和产品的特征向量都是未知的,这个式子存在两个未知变量

解决的办法是交替的最小二乘法
首先对于上面的公式,以下面的形式显示:

说明: https://img-blog.csdn.net/20151217154940124

为了防止过度拟合,加上正则化参数

说明: https://img-blog.csdn.net/20151217155017302

说明: https://img-blog.csdn.net/20151217155226825

首先用一个小于1的随机数初始化V
根据公式(4)求U
此时就可以得到初始的UV矩阵了,计算上面说过的差平方和
根据计算得到的U和公式(5),重新计算并覆盖V,计算差平方和
反复进行以上两步的计算,直到差平方和小于一个预设的数,或者迭代次数满足要求则停止
取得最新的UV矩阵
则原本的稀疏矩阵R就可以用R=U(V)T来表示了
以上公式内容截图来自:
基于矩阵分解的协同过滤算法

总结一下:
ALS
算法的核心就是将稀疏评分矩阵分解为用户特征向量矩阵和产品特征向量矩阵的乘积
交替使用最小二乘法逐步计算用户/产品特征向量,使得差平方和最小
通过用户/产品特征向量的矩阵来预测某个用户对某个产品的评分

 

********************************************************************************************************************************************************************************************************************

基于邻域的方法

5.基于用户的领域算法

基于用户的邻域算法和基于物品的邻域算法都可以应用到评分预测中。基于用户的邻域算法

认为预测一个用户对一个物品的评分,需要参考和这个用户兴趣相似的用户对该物品的评分,即:

这里,S(u, K)是和用户u兴趣最相似的K个用户的集合,N(i)是对物品i评过分的用户集合,是用户v对物品i的评分,是用户v对他评过分的所有物品评分的平均值。用户之间的相似度可以通过皮尔逊系数计算:

 

4.基于物品的邻域算法

       基于物品的邻域算法在预测用户U对物品i的评分时,会参考用户u对和物品i相似的其他物品的评分 即:


这里 S(u,K)是和i最想死的物品集合,N(u) 是用户u评过分的物品集合,w 是物品之间的相似度, i r 是物品i的平均分。对于如何计算物品的相似度,上面已经定义了距离的几种求解方法,

 

第一种是普通的余弦相似度(cosine similarity):

第二种是皮尔逊系数(pearson correlation)

第三种被Sarwar称为修正的余弦相似度(adjust cosine similarity):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章