Как обрабатывается NaN в матрице подобия пользователей корреляции Пирсона -в рекомендательной системе?

Я генерирую пользовательскую -матрицу подобия пользователей из данных пользовательского -рейтинга (, в частности данных 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  

Пользователь -Пользователь Пирсон Корреляционная матрица подобия

              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

Для вычисления корреляции Пирсона между двумя пользователями рассматриваются только коррелированные элементы. (См. К следующему поколению рекомендательных систем :Обзор состояния --искусства и -возможных расширений, Гедиминаса Адомавичуса, Александра Тужилина

Как я могу обрабатывать значения NaN?

РЕДАКТИРОВАТЬ Вот код, с помощью которого я нахожу корреляцию Пирсона в R. Матрица 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.

6
задан smci 28 October 2016 в 04:42
поделиться