Косинусное сходство в Python

  1. Используйте модуль scipy для вычисления косинусного сходства между двумя списками в Python
  2. Используйте модуль NumPy для вычисления косинусного сходства между двумя списками в Python
  3. Используйте модуль sklearn для вычисления косинусного сходства между двумя списками в Python
  4. Используйте модуль torch для вычисления косинусного сходства между двумя списками в Python

Сходство косинуса измеряет сходство между списками векторов путем вычисления угла косинуса между двумя списками векторов. Если вы рассматриваете функцию косинуса, ее значение при 0 градусах равно 1 и -1 при 180 градусах. Это означает, что для двух перекрывающихся векторов значение косинуса будет максимальным и минимальным для двух точно противоположных векторов.

В этой статье мы рассчитаем косинусное сходство между двумя списками одинакового размера.

Используйте модуль scipy для вычисления косинусного сходства между двумя списками в Python

Функция spatial.cosine.distance() из модуля scipy вычисляет расстояние вместо косинусного подобия, но для этого мы можем вычесть значение расстояния из 1.

Например,

from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine(List1, List2)
print(result)

Выход:

0.9720951480078084

Используйте модуль NumPy для вычисления косинусного сходства между двумя списками в Python

Функция numpy.dot() вычисляет скалярное произведение двух векторов, переданных в качестве параметров. Функция numpy.norm() возвращает векторную норму.

Мы можем использовать эти функции с правильной формулой для вычисления косинусного подобия.

Например,

from numpy import dot
from numpy.linalg import norm
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = dot(List1, List2)/(norm(List1)*norm(List2))
print(result)

Выход:

0.9720951480078084

Если есть несколько или список векторов и вектор запроса для вычисления косинусного сходства, мы можем использовать следующий код.

import numpy as np
List1 =np.array([[ 4, 45,  8,  4],
       [ 2, 23,  6,  4]])

List2=np.array([ 2, 54, 13, 15])

similarity_scores = List1.dot(List2)/ (np.linalg.norm(List1, axis=1) * np.linalg.norm(List2))

print(similarity_scores)

Выход:

[0.98143311 0.99398975]

Используйте модуль sklearn для вычисления косинусного сходства между двумя списками в Python

В модуле sklearn есть встроенная функция под названием cosine_similarity() для вычисления косинусного сходства.

См. Код ниже.

from sklearn.metrics.pairwise import cosine_similarity,cosine_distances
A=np.array([10,3])
B=np.array([8,7])
result=cosine_similarity(A.reshape(1,-1),B.reshape(1,-1))
print(result)

Выход:

[[0.91005765]]

Используйте модуль torch для вычисления косинусного сходства между двумя списками в Python

Когда мы имеем дело с N-мерными тензорами, имеющими формы (m, n), мы можем использовать функцию consine_similarity() из модуля torch, чтобы найти косинусное подобие.

Например,

import torch
import torch.nn.functional as F
t1 = [3,45,6,8]
a = torch.FloatTensor(t1)

t2 = [4,54,3,7]
b = torch.FloatTensor(t2)
result = F.cosine_similarity(a, b, dim=0)

print(result)

Выход:

tensor(0.9960)

Списки конвертируются в тензоры с помощью модуля torch.FloatTensor().

Сопутствующая статья - Python Math

  • Вычислить производную в Python
  • Вычислить кумулятивную функцию распределения в Python
  • Вычислить обратную касательную в Python
  • Вычислить среднее арифметическое в Python