基于pearson(皮尔逊)相似度的用户推荐算法

最近因为写一些数据分析报告,把写博客的进度耽误了一点,不过不要紧,我最近优化了一下做出的推荐算法,用pearson相似度替换了欧氏距离相似度,优化了推荐算法代码,另外将700多个用户的推荐投资品循环计算了。


先说一下pearson相似度:

pearson相似度与欧式距离相似度的最大区别在于它比欧式距离更重视数据集的整体性;因为pearson相似度计算的是相对距离,欧式距离计算的是绝对距离。

就实际应用来说,有不同量纲和单位的数据集适合使用pearson相似度来计算,相同量纲和单位的数据集适合使用欧氏距离。

因为目前我使用的数据集都是投资者与投资品的匹配关系,量纲是相同的,所以使用pearson相似度计算的推荐结果与欧式距离计算的推荐结果是一致的。


好了,言归正传,我们来看一下pearson相似度的真面目吧,实际项目中代码如下:


#pearson相似度算法,按行计算与其他用户的相似度矩阵
PearsonDistanceSimilarity<-function(M){
  row<-nrow(M)
  s<-matrix(0, row, row)
  for(z1 in 1:row){
    for(z2 in 1:row)
      try({if(z1!=z2){
        s[z1,z2]<-cor(M[z1,],M[z2,])
        }
        else {s[z1,z2]<-0}
      },silent = T)
  }
  s
  }


因为之前的文章中,我们已经将投资者与投资品的喜好矩阵M搭建好了,所以这里我直接调用了它。

然后我建立了一个行列均为用户数(也就是row)的空矩阵用来放置我计算的相似度结果。

然后建立了一个for循环计算每一行与其他行的pearson相似度,并写入对应的矩阵集,如第一行与第七行的相似度,直接写入矩阵第一行第七列;其中如果计算本行与本行的相似度,直接取值为0,因为不能根据自己的投资行为给自己推荐投资品,如第二行与第二行计算相似度,直接设置为0。


在这里我普及一下pearson相似度的计算方法:



在R里面提供了cor函数可以直接计算该值。



然后我又优化了一下推荐算法的代码,主要是去掉了多余的代码,具体代码如下:

#推荐算法,推荐相似度最高的用户均投资过的产品,并依据喜好权重给出推荐评分
UserBasedRecommender<-function(uid,n,M,S,N){
  row<-ncol(N)
  col<-ncol(M)
  r<-matrix(0, row, col)
  N1<-N[uid,]
  for(z1 in 1:length(N1)){
    num<-intersect(which(M[uid,]==0),which(M[N1[z1],]!=0)) #可计算的列
    #     print(num)
    
    for(z2 in num){
      #       print(paste("for:",z1,N1[z1],z2,M[N1[z1],z2],S[uid,N1[z1]]))
      r[z1,z2]=M[N1[z1],z2]*S[uid,N1[z1]]
    }
  }
  
  sum<-colSums(r)
  s2<-matrix(0, 1, col)
  for(z1 in 1:length(N1)){
    num<-intersect(which(colSums(r)!=0),which(M[N1[z1],]!=0))
    for(z2 in num){
      s2[1,][z2]<-s2[1,][z2]+S[uid,N1[z1]]
    }
  }


  r2<-matrix(0, n, 2)
  rr<-sum/s2
  item <-dimnames(M)[[2]]
  for(z1 in 1:n){
    w<-which.max(rr)
    if(rr[w]>0.5){
      r2[z1,1]<-item[which.max(rr)]
      r2[z1,2]<-as.double(rr[w])
      rr[w]=0
    }
  }
  r2
}


相比上次说明的推荐算法语句(具体请看:http://blog.csdn.net/qq_28887735/article/details/51985729),我去掉了s2矩阵的第二行。


好了,这次的推荐结果如何呢?我给大家截个图:



使用欧式距离计算相似度,对本数据集来说,共有245个投资者可以找到有效的推荐产品;

其中5个投资者推荐了3个投资品,180个投资者推荐了2个投资品,60个投资者推荐了1个投资品;


使用皮尔逊相似度算法,对本数据集来说,共有85个投资者可以找到有效的推荐产品;

其中51个投资者推荐了3个投资品,34个投资者推荐了2个投资品。


整体来说,在相同初始值下,欧氏距离计算相似度,可以增加推荐广度;皮尔逊算法计算相似度,可以增加推荐深度。

另外我的数据集量纲一致,可能会对此结果有部分影响,仅供参考,大家如果有新的想法可直接与我联系,一起实践更容易获得真知。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 假设有两个用户A和B,他们对电影的评分如下: | 电影名称 | 用户A的评分 | 用户B的评分 | | -------- | ----------- | ----------- | | 电影1 | 5 | 4 | | 电影2 | 2 | 3 | | 电影3 | 4 | 5 | | 电影4 | 1 | 2 | 现在我们要计算用户A与用户B的相似度,基于Pearson Correlation Similarity方法,具体步骤如下: 1. 计算每个用户的平均评分: - 用户A的平均评分:(5 + 2 + 4 + 1) / 4 = 3 - 用户B的平均评分:(4 + 3 + 5 + 2) / 4 = 3.5 2. 计算每个用户的评分偏差值: - 用户A对每部电影的评分偏差值:[5-3, 2-3, 4-3, 1-3] = [2, -1, 1, -2] - 用户B对每部电影的评分偏差值:[4-3.5, 3-3.5, 5-3.5, 2-3.5] = [0.5, -0.5, 1.5, -1.5] 3. 计算两个用户的评分偏差值的乘积之和: - 评分偏差值的乘积之和:2 * 0.5 + (-1) * (-0.5) + 1 * 1.5 + (-2) * (-1.5) = 6 4. 计算每个用户的评分偏差值的平方和: - 用户A的评分偏差值的平方和:2^2 + (-1)^2 + 1^2 + (-2)^2 = 10 - 用户B的评分偏差值的平方和:0.5^2 + (-0.5)^2 + 1.5^2 + (-1.5)^2 = 5.5 5. 计算每个用户的评分偏差值的平方和的平方根: - 用户A的评分偏差值的平方和的平方根:sqrt(10) ≈ 3.16 - 用户B的评分偏差值的平方和的平方根:sqrt(5.5) ≈ 2.35 6. 计算Pearson相关系数: - Pearson相关系数:6 / (3.16 * 2.35) ≈ 0.91 因此,用户A与用户B的相似度为0.91。在计算推荐值时,我们可以使用该相似度来进行基于用户相似度的加权推荐。 ### 回答2: 基于用户相似度的加权Pearson Correlation Similarity法是推荐系统中常用的算法之一。它通过计算用户之间的相似度来预测用户对未评价项目的喜好程度。 举个例子来说明这个算法的过程:假设有四个用户A、B、C和D,他们对几部电影的评分如下表所示: 用户|电影1的评分|电影2的评分|电影3的评分 ---|---|---|--- A|5|3|2 B|4|4|4 C|2|3|5 D|2|2|1 首先,我们需要计算用户之间的皮尔逊相关系数。取用户A作为目标用户,与其相似度最高的用户用户B,他们的相似度为0.654。与目标用户相似度最低的用户用户D,他们的相似度为-1。用户C与目标用户相似度为-0.654。 接下来,我们需要计算用户B和用户D对电影1的加权评分。用户B对电影1的评分是4,与目标用户相似度为0.654,因此用户B对电影1的加权评分是4 * 0.654 = 2.616。用户D对电影1的评分是2,与目标用户相似度为-1,因此用户D对电影1的加权评分是2 * (-1) = -2。 最后,我们将所有用户对电影1的加权评分相加得到推荐值:2.616 + (-2) = 0.616。相似的计算过程可以应用于其他电影,从而得到电影2和电影3的推荐值。 通过基于用户相似度的加权Pearson Correlation Similarity法,我们可以根据用户之间的相似度来预测他们对未评价项目的喜好程度,从而为用户提供个性化的推荐。 ### 回答3: 基于用户相似度的加权Pearson Correlation Similarity(简称PCC)法是一种用于计算推荐值的方法。它通过比较用户之间的评分相似性来找到与目标用户最相似的用户,并基于这些相似用户的评分来进行加权计算。 举例来说,假设有三位用户A、B和C,他们对两部电影X和Y进行了评分。其中,用户A和C的评分较为相似,而用户B的评分与他们较为不同。我们希望通过PCC方法来计算推荐值,预测用户A对电影Y的评分。 首先,我们计算用户A与用户B以及用户C之间的Pearson Correlation Coefficient(皮尔逊相关系数)。通过比较共同评分项(如对电影X的评分),我们可以计算出用户A与B的相关系数为-0.8,而用户A与C的相关系数为0.9。这意味着用户A与C之间的评分比较相似,而与用户B之间的评分则相对较不相似。 接下来,我们通过加权计算来预测用户A对电影Y的评分。我们可以根据用户A与其相似用户(如用户C)的权重来进行计算,权重可根据相关系数来确定。因为用户A与用户C的相关系数为0.9,我们可以给予用户C的评分较大的权重。假设用户C对电影Y的评分为4,那么我们可以通过加权计算得到用户A对电影Y的推荐值为3.6(0.9*4=3.6)。 综上所述,基于用户相似度的加权PCC法可以通过比较用户之间的评分相似性来计算推荐值。通过加权计算,我们可以根据与目标用户最相似的用户的评分来预测目标用户对其他物品的评分,从而实现个性化的推荐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值