2016-05-03 2 views
0

Я пытаюсь найти расстояние косинуса между двумя n-мерными векторами. Я сделал это, используя как scipy, так и sklearn. Как-то вывод двух библиотек отличается. Я не могу понять, почему.Выход сходства косинуса различен для разных библиотек

import numpy as np 
from scipy import spatial 
from sklearn import metrics 
a=np.array([1,2,3,4]) 
b=np.array([2,3,1,4]) 
X=np.array([a,b]) 
print spatial.distance.pdist(X,'cosine')[0] 
print metrics.pairwise.cosine_similarity(a,b)[0][0] 
print metrics.pairwise_distances(np.reshape(a,(1,4)),np.reshape(b,(1,4)),metric = 'cosine')[0][0] 

Выход этого кода выглядит следующим образом:

0.1 

0.9 

0.1 
+1

Я считаю, что '0.9' является косинусом угла между' a' и 'b'. –

ответ

0

Разница заключается в том, что один раз, когда вы вычислить косинус расстояние (spatial.distance.pdist, metrics.pairwise_distances), в то время как другое время вы вычисления косинуса сходство (metrics.pairwise.cosine_similarity).

Так cosine_distance = 1 - cosine_similarity, что объясняет, почему distance между двумя точками данных в вашем примере 0.1 и similarity между ними 0.9.

scipy обычно вычисляет расстояния, и если вы посмотрите на docs, то расстояние от косинуса фактически определяется как 1 - cosine_similarity.

+0

Это имеет смысл. По крайней мере, для этого примера. Но я получил выход более 1,0 в случае pdist и парных расстояний. Это меня смутило. Я действительно должен был дать другой пример. –

+0

Можете ли вы привести этот пример? В любом случае, «подобие косинуса» определяется только в диапазоне «[0, 1]», если ваши векторы признаков не содержат отрицательных значений (следовательно, угол не будет больше 90º для векторов признаков с только положительными значениями) , – tttthomasssss

+0

Мои векторы признаков содержали отрицательные значения. Я только что проверил. Pdist вышел 1.07250622457, а cosine_similarity дал выход от -0.0725063. Поэтому я понял, что диапазон, в котором эти две функции определены, просто отличается. Они делают то же самое. Благодарю. –

Смежные вопросы