Выход косинуса сходство отличается от scipy против склеарн - PullRequest
0 голосов
/ 11 апреля 2019

Я уверен, что что-то упускаю, но почему эти выводы разные?

scikit learn

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity([[3,5,1]],[[1,2,3]])

### output `array([[0.72280632]])`

scipy

from scipy.spatial.distance import cosine
cosine([3,5,1],[1,2,3])

### output 0.27719367767579906

Почему это не одно и то же?Из моих расчетов не похоже, что это разница между использованием нормы L1 или L2 в знаменателе

1 Ответ

2 голосов
/ 11 апреля 2019

Определения используемых ими косинусных расстояний различны.

Строка документации для sklearn.metrics.pairwise.cosine_similarity гласит:

Вычисляет сходство косинусов между образцами в X и Y. Сходство косинусов,или ядро ​​косинуса, вычисляет сходство как нормализованное скалярное произведение X и Y:

$ косинус (X, Y) = / (|| X || * || Y ||)$

В то время как scipy.spatial.distance.cosine говорит:

Косинусное расстояние между X и Y определяется как

$ косинус (X, Y) =1 - / (|| X || * || Y ||) $.

, где $ $ - скалярное произведение между $ X $ и $Y $ и $ || X || $ - норма L2.

(я немного изменил строки документа, чтобы использовать те же имена переменных и математические соглашения для более простого сравнения.)

В основном у вас есть 1 - cosine_sklearn = cosine_scipy.

...