Как эффективно создать матрицу расстояний с пользовательской метрикой в ​​r?

У меня есть некоторые разреженные данные, и я хотел бы рассчитать пропущенные значения, используя метод вменения kNN. Я планировал сделать матрицу расстояний из моих данных и найти k ближайших соседей к каждой из моих строк. После этого я намеревался заполнить пропущенные значения в каждой строке медианой или средним значением k ближайших рядов.

С этой целью я решил, что было бы хорошо построить матрицу расстояний с пользовательской метрикой, которая нормализует евклидово расстояние на основе количества пропущенных значений. Проблема в том, что мой вложенный цикл занимает слишком много времени:

a <- rep(0, nrow(df)) 
for(i in 1:nrow(df)) {
  for (j in 1:nrow(df)){
    l <- ! is.na(df[i,]) & ! is.na(df[j,]) #locate NA's
    #adding custom distance to distance matrix
    a[i,j] <- (ncol(df)/sum(l) * sum((df[i,][l] - df[j,][l])^2))^1/2 #custom function
  }
}

0 ответов

Другие вопросы по тегам