Базовая функция dissimilarity() = 1 - pmax(cor(), 0)
R.Кроме того, важно указать method
, чтобы они оба использовали один и тот же:
library("recommenderlab")
data(MovieLense)
cor_mat <- as( dissimilarity(MovieLense, method = "pearson",
which = "items"), "matrix" )
cor_mat_base <- suppressWarnings( cor(as(MovieLense, "matrix"), method = "pearson"
, use = "pairwise.complete.obs") )
print( cor_mat[1:5, 1:5] )
print(1- cor_mat_base[1:5, 1:5] )
> print( cor_mat[1:5, 1:5] )
Toy Story (1995) GoldenEye (1995) Four Rooms (1995) Get Shorty (1995) Copycat (1995)
Toy Story (1995) 0.0000000 0.7782159 0.8242057 0.8968647 0.6135248
GoldenEye (1995) 0.7782159 0.0000000 0.7694644 0.7554443 0.7824406
Four Rooms (1995) 0.8242057 0.7694644 0.0000000 1.0000000 0.8153877
Get Shorty (1995) 0.8968647 0.7554443 1.0000000 0.0000000 1.0000000
Copycat (1995) 0.6135248 0.7824406 0.8153877 1.0000000 0.0000000
> print(1- cor_mat_base[1:5, 1:5] )
Toy Story (1995) GoldenEye (1995) Four Rooms (1995) Get Shorty (1995) Copycat (1995)
Toy Story (1995) 0.0000000 0.7782159 0.8242057 0.8968647 0.6135248
GoldenEye (1995) 0.7782159 0.0000000 0.7694644 0.7554443 0.7824406
Four Rooms (1995) 0.8242057 0.7694644 0.0000000 1.2019687 0.8153877
Get Shorty (1995) 0.8968647 0.7554443 1.2019687 0.0000000 1.2373503
Copycat (1995) 0.6135248 0.7824406 0.8153877 1.2373503 0.0000000
Чтобы хорошо это понять, проверьте детали обоих пакетов:).
OP / EDIT: Важно отметить, что есть некоторые значения, которые немного отличаются между четными 1-dissimilarity
и cor
, имеющих cor
больше 1. Это потому, что dissimilarity()
устанавливает этаж на 0 (т. е. не возвращает отрицательные числа), а также выполнение cor()
может вернуть значения больше 1. https://www.rdocumentation.org/packages/stats/versions/3.6.0/topics/cor они только указывают, что
For r <- cor(*, use = "all.obs"), it is now guaranteed that all(abs(r) <= 1).
Это следует оценить.