Мне интересно найти сходство конкретного вектора (1), принадлежащего матрице, с любыми другими векторами (v1, v2, v3, v4 и т. Д. c.) В матрице, а затем отобразить список наиболее похожие. это код, который я использую до сих пор. Это работает, но у него есть проблемы, когда матрица начинает становиться слишком большой, поскольку я, вероятно, превышаю память в R. Я понял, что, возможно, я делаю не самую эффективную вещь, поскольку я в настоящее время вычисляю косинусное сходство для всей матрицы, в то время как я Интересует только косинусное сходство моего вектора с любым другим вектором в матрице
. Вот пример структуры моих данных:
complete_table (последняя строка - целевой вектор, который я хочу вычислить косинусное сходство по всем остальным векторам):
c1 c2 c3 c4 c5 c6 c7 c8
v1 1 1 2 2 4 3 1 1
v2 3 3 2 1 5 2 1 2
v3 3 4 2 0 0 0 0 9
v4 4 5 5 5 4 0 0 0
v5 0 0 0 0 8 7 8 6
1 5 0 0 0 0 6 0 0
функция, которую я использую:
cosineDist <- function(x){
as.dist(1 - x%*%t(x)/(sqrt(rowSums(x^2) %*% t(rowSums(x^2)))))
}
matrix <- as.matrix(complete_table)
results <- as.matrix(cosineDist(matrix1))
results_simil <- as.data.frame(results[1:nrow(complete_table)-1,nrow(complete_table)])
colnames(results_simil) <- "similarity_with_proxy_score(0_max)"
results_simil$match_score <- 1-results_simil$`similarity_with_proxy_score(0_max)`
, так что в основном в results_simil я нахожу сходство «1» с любым v1, v2 и т. д. c
как я могу добиться того же результата более эффективным способом, чтобы я вычислял только косинусное сходство для целевого вектора "1" (тот, что в последней строке), а не вся матрица?