Как рассчитать косинусное сходство в Python


Косинусное сходство — это мера сходства между двумя векторами пространства внутреннего произведения.

Для двух векторов, A и B, косинусное сходство вычисляется как:

Подобие косинуса = ΣA i B i / (√ΣA i 2 √ΣB i 2 )

В этом руководстве объясняется, как вычислить косинусное сходство между векторами в Python с использованием функций из библиотеки NumPy .

Косинусное сходство между двумя векторами в Python

Следующий код показывает, как вычислить косинусное сходство между двумя массивами в Python:

from numpy import dot
from numpy. linalg import norm

#define arrays
a = [23, 34, 44, 45, 42, 27, 33, 34]
b = [17, 18, 22, 26, 26, 29, 31, 30]

#calculate Cosine Similarity
cos_sim = dot (a, b)/( norm (a)\* norm (b))

cos_sim

0.965195008357566

Косинусное сходство между двумя массивами оказывается равным 0,965195 .

Обратите внимание, что этот метод будет работать с двумя массивами любой длины:

import numpy as np
from numpy import dot
from numpy. linalg import norm

#define arrays
a = np.random.randint(10, size= 100 )
b = np.random.randint(10, size= 100 )

#calculate Cosine Similarity
cos_sim = dot (a, b)/( norm (a)\* norm (b))

cos_sim

0.7340201613960431

Однако это работает только в том случае, если два массива имеют одинаковую длину:

import numpy as np
from numpy import dot
from numpy. linalg import norm

#define arrays
a = np.random.randint(10, size= 90 ) #length=90
b = np.random.randint(10, size= 100 ) #length=100

#calculate Cosine Similarity
cos_sim = dot (a, b)/( norm (a)\* norm (b))

cos_sim

ValueError : shapes (90,) and (100,) not aligned: 90 (dim 0) != 100 (dim 0)

Заметки

1. Существует несколько способов вычисления подобия косинуса с помощью Python, но, как объясняется в этой ветке Stack Overflow , метод, описанный в этом посте, оказывается самым быстрым.

2. Обратитесь кэтой странице Википедии, чтобы узнать больше о сходстве косинусов.