如何在推荐系统中的Pearson相关用户 - 用户相似度矩阵中处理​​NaN?

时间:2012-07-11 09:29:48

标签: r nan correlation recommendation-engine pearson

我正在根据用户评级数据(特别是MovieLens100K数据)生成用户 - 用户相似度矩阵。计算相关性导致一些NaN值。我在一个较小的数据集中测试过:

用户项评级矩阵

   I1 I2 I3 I4
U1 4  0  5  5  
U2 4  2  1  0  
U3 3  0  2  4  
U4 4  4  0  0  

用户 - 用户Pearson相关性相似性矩阵

              U1        U2        U3       U4      U5
U1             1        -1         0      -nan  0.755929
U2            -1         1         1      -nan -0.327327
U3             0         1         1      -nan  0.654654
U4          -nan      -nan      -nan      -nan      -nan
U5      0.755929 -0.327327  0.654654      -nan         1

为了计算皮尔森相关性,在两个用户之间仅考虑经过指定的项目。 (见Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions, Gediminas Adomavicius, Alexander Tuzhilin

我如何处理NaN值?

修改 这是一个代码,我在其中找到R中的pearson相关性。R矩阵是用户项目评级矩阵。包含1到5刻度等级0表示未评级。 S是用户 - 用户关联矩阵。

  for (i in 1:nrow (R))
  {
    cat ("user: ", i, "\n");
    for (k in 1:nrow (R))
    {
      if (i != k)
      {
        corated_list <- which (((R[i,] != 0) & (R[k,] != 0)) == TRUE);
        ui <- (R[i,corated_list] - mean (R[i,corated_list]));
        uk <- (R[k,corated_list] - mean (R[k,corated_list]));
        temp <- sum (ui * uk) / sqrt (sum (ui^2) * sum (uk^2));
        S[i,k] <- ifelse (is.nan (temp), 0, temp)
      }
      else
      {
        S[i,k] <- 0;
      }
    }
  }

请注意,在S[i,k] <- ifelse (is.nan (temp), 0, temp)行中,我将NaN替换为0.

0 个答案:

没有答案