Semelhança de cosseno em Python
-
Use o módulo
scipy
para calcular a semelhança de cossenos entre duas listas em Python -
Use o módulo
NumPy
para calcular a semelhança de cossenos entre duas listas em Python -
Use o módulo
sklearn
para calcular a semelhança de cossenos entre duas listas em Python -
Use o módulo
torch
para calcular a semelhança de cossenos entre duas listas em Python
A similaridade de cosseno mede a similaridade entre listas de vetores calculando o ângulo de cosseno entre as duas listas de vetores. Se você considerar a função cosseno, seu valor em 0 graus é 1 e -1 em 180 graus. Isso significa que para dois vetores sobrepostos, o valor do cosseno será máximo e mínimo para dois vetores precisamente opostos.
Neste artigo, calcularemos a semelhança do cosseno entre duas listas de tamanhos iguais.
Use o módulo scipy
para calcular a semelhança de cossenos entre duas listas em Python
A função spatial.cosine.distance()
do módulo scipy
calcula a distância em vez da semelhança do cosseno, mas para isso, podemos subtrair o valor da distância de 1.
Por exemplo,
from scipy import spatial
List1 = [4, 47, 8, 3]
List2 = [3, 52, 12, 16]
result = 1 - spatial.distance.cosine(List1, List2)
print(result)
Resultado:
0.9720951480078084
Use o módulo NumPy
para calcular a semelhança de cossenos entre duas listas em Python
A função numpy.dot()
calcula o produto escalar dos dois vetores passados como parâmetros. A função numpy.norm()
retorna a norma do vetor.
Podemos usar essas funções com a fórmula correta para calcular a similaridade do cosseno.
Por exemplo,
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)
Resultado:
0.9720951480078084
Se houver vários ou uma lista de vetores e um vetor de consulta para calcular as semelhanças de cossenos, podemos usar o código a seguir.
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)
Resultado:
[0.98143311 0.99398975]
Use o módulo sklearn
para calcular a semelhança de cossenos entre duas listas em Python
No módulo sklearn
, existe uma função incorporada chamada cosine_similarity()
para calcular a semelhança do cosseno.
Veja o código abaixo.
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)
Resultado:
[[0.91005765]]
Use o módulo torch
para calcular a semelhança de cossenos entre duas listas em Python
Quando lidamos com tensores N-dimensionais com formas (m, n), podemos usar a função consine_similarity()
do módulo torch
para encontrar a similaridade do cosseno.
Por exemplo,
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)
Resultado:
tensor(0.9960)
As listas são convertidas em tensores usando o módulo torch.FloatTensor()
.