Similitud de coseno en Python

Shivam Arora 30 enero 2023
  1. Utilice el módulo scipy para calcular la similitud de coseno entre dos listas en Python
  2. Utilice el módulo NumPy para calcular la similitud de coseno entre dos listas en Python
  3. Utilice el módulo sklearn para calcular la similitud de coseno entre dos listas en Python
  4. Utilice el módulo torch para calcular la similitud de coseno entre dos listas en Python
Similitud de coseno en Python

La similitud del coseno mide la similitud entre las listas de vectores calculando el ángulo del coseno entre las dos listas de vectores. Si considera la función coseno, su valor a 0 grados es 1 y -1 a 180 grados. Esto significa que para dos vectores superpuestos, el valor del coseno será máximo y mínimo para dos vectores exactamente opuestos.

En este artículo, calcularemos la similitud de coseno entre dos listas de tamaños iguales.

Utilice el módulo scipy para calcular la similitud de coseno entre dos listas en Python

La función spatial.cosine.distance() del módulo scipy calcula la distancia en lugar de la similitud del coseno, pero para lograr eso, podemos restar el valor de la distancia de 1.

Por ejemplo,

from scipy import spatial

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

Producción :

0.9720951480078084

Utilice el módulo NumPy para calcular la similitud de coseno entre dos listas en Python

La función numpy.dot() calcula el producto escalar de los dos vectores pasados ​​como parámetros. La función numpy.norm() devuelve la norma vectorial.

Podemos usar estas funciones con la fórmula correcta para calcular la similitud del coseno.

Por ejemplo,

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)

Producción :

0.9720951480078084

Si hay varios o una lista de vectores y un vector de consulta para calcular similitudes de coseno, podemos usar el siguiente código.

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)

Producción :

[0.98143311 0.99398975]

Utilice el módulo sklearn para calcular la similitud de coseno entre dos listas en Python

En el módulo sklearn, hay una función incorporada llamada cosine_similarity() para calcular la similitud del coseno.

Vea el código a continuación.

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)

Producción :

[[0.91005765]]

Utilice el módulo torch para calcular la similitud de coseno entre dos listas en Python

Cuando tratamos con tensores N-dimensionales que tienen formas (m, n), podemos usar la función consine_similarity() del módulo torch para encontrar la similitud del coseno.

Por ejemplo,

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)

Producción :

tensor(0.9960)

Las listas se convierten en tensores utilizando el módulo torch.FloatTensor().

Artículo relacionado - Python Math