Somiglianza coseno in Python
-
Usa il modulo
scipyper calcolare la somiglianza del coseno tra due elenchi in Python -
Usa il modulo
NumPyper calcolare la somiglianza del coseno tra due elenchi in Python -
Usa il modulo
sklearnper calcolare la somiglianza del coseno tra due elenchi in Python -
Usa il modulo
torchper calcolare la somiglianza del coseno tra due elenchi 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().