Somiglianza coseno in Python

Shivam Arora 10 agosto 2021
  1. Usa il modulo scipy per calcolare la somiglianza del coseno tra due elenchi in Python
  2. Usa il modulo NumPy per calcolare la somiglianza del coseno tra due elenchi in Python
  3. Usa il modulo sklearn per calcolare la somiglianza del coseno tra due elenchi in Python
  4. Usa il modulo torch per calcolare la somiglianza del coseno tra due elenchi in Python
Somiglianza coseno in Python

La somiglianza del coseno misura la somiglianza tra gli elenchi di vettori calcolando l’angolo del coseno tra i due elenchi di vettori. Se consideri la funzione coseno, il suo valore a 0 gradi è 1 e -1 a 180 gradi. Ciò significa che per due vettori sovrapposti, il valore del coseno sarà massimo e minimo per due vettori esattamente opposti.

In questo articolo, calcoleremo la somiglianza del coseno tra due elenchi di dimensioni uguali.

Usa il modulo scipy per calcolare la somiglianza del coseno tra due elenchi in Python

La funzione spatial.cosine.distance() del modulo scipy calcola la distanza invece della somiglianza coseno, ma per ottenere ciò, possiamo sottrarre il valore della distanza da 1.

Per esempio,

from scipy import spatial

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

Produzione:

0.9720951480078084

Usa il modulo NumPy per calcolare la somiglianza del coseno tra due elenchi in Python

La funzione numpy.dot() calcola il prodotto scalare dei due vettori passati come parametri. La funzione numpy.norm() restituisce la norma vettoriale.

Possiamo usare queste funzioni con la formula corretta per calcolare la somiglianza del coseno.

Per esempio,

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)

Produzione:

0.9720951480078084

Se ci sono più o un elenco di vettori e un vettore di query per calcolare le somiglianze del coseno, possiamo usare il seguente codice.

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)

Produzione:

[0.98143311 0.99398975]

Usa il modulo sklearn per calcolare la somiglianza del coseno tra due elenchi in Python

Nel modulo sklearn, c’è una funzione incorporata chiamata cosine_similarity() per calcolare la somiglianza del coseno.

Vedi il codice qui sotto.

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)

Produzione:

[[0.91005765]]

Usa il modulo torch per calcolare la somiglianza del coseno tra due elenchi in Python

Quando abbiamo a che fare con tensori N-dimensionali aventi forme (m,n), possiamo usare la funzione consine_similarity() del modulo torch per trovare la somiglianza del coseno.

Per esempio,

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)

Produzione:

tensor(0.9960)

Le liste vengono convertite in tensori utilizzando il modulo torch.FloatTensor().

Articolo correlato - Python Math