Similarità del Coseno e Correlazione di Pearson
Scorri per mostrare il menu
Similarità Coseno
La similarità coseno è una metrica che quantifica la somiglianza tra due vettori misurando il coseno dell'angolo tra di essi. È definita matematicamente come:
Similarità Coseno = ∑i=1nAi2⋅∑i=1nBi2∑i=1nAiBi
dove A e B sono vettori utente o oggetto. Geometricamente, la similarità coseno cattura quanto due vettori sono allineati, indipendentemente dalla loro magnitudine. Un valore pari a 1 indica che i vettori puntano nella stessa direzione (massima somiglianza), 0 indica che sono ortogonali (nessuna somiglianza), e -1 indica che puntano in direzioni opposte. Nell'ambito del behavioral matching, la similarità coseno è utile quando interessa il modello delle preferenze piuttosto che i valori assoluti, ad esempio quando si confrontano utenti che valutano gli oggetti su scale differenti.
Correlazione di Pearson
La correlazione di Pearson misura la relazione lineare tra due vettori, tenendo conto sia della direzione che della media dei dati. La formula è:
Pearson Correlation=∑i=1n(Ai−Aˉ)2⋅∑i=1n(Bi−Bˉ)2∑i=1n(Ai−Aˉ)(Bi−Bˉ)
dove Aˉ e Bˉ sono le medie dei vettori A e B. La correlazione di Pearson varia da -1 (relazione lineare negativa perfetta) a 1 (relazione lineare positiva perfetta), con 0 che indica assenza di relazione lineare. Questa metrica è particolarmente utile quando si desidera confrontare utenti o oggetti eliminando i bias individuali, ad esempio quando un utente tende a dare valutazioni sempre più alte o più basse rispetto a un altro.
Confronto
- Si concentra sull'orientamento dei vettori e ignora la loro media e magnitudine;
- È una buona scelta per dati sparsi in cui molte valutazioni sono mancanti o pari a zero, ma può sovrastimare la somiglianza quando gli utenti utilizzano scale di valutazione sistematicamente diverse.
- Rimuove la valutazione media da ciascun vettore, rendendolo robusto alle differenze di scala o preferenza di base;
- È preferibile quando si desidera controllare il bias di utente o oggetto, ma potrebbe non catturare relazioni non lineari.
Esempio: Calcolo di Entrambe le Metriche
Supponiamo di avere due utenti che hanno valutato quattro articoli. Le loro valutazioni sono:
- Utente 1:
[4, 0, 3, 5] - Utente 2:
[5, 1, 2, 4]
È possibile calcolare sia la similarità coseno che la correlazione di Pearson per questi vettori per confrontare la loro somiglianza comportamentale.
12345678910111213141516171819import numpy as np # User ratings user1 = np.array([4, 0, 3, 5]) user2 = np.array([5, 1, 2, 4]) # Cosine similarity def cosine_similarity(a, b): dot_product = np.dot(a, b) norm_a = np.linalg.norm(a) norm_b = np.linalg.norm(b) return dot_product / (norm_a * norm_b) cos_sim = cosine_similarity(user1, user2) print(f"Cosine Similarity: {cos_sim:.4f}") # Pearson correlation pearson_corr = np.corrcoef(user1, user2)[0, 1] print(f"Pearson Correlation: {pearson_corr:.4f}")
Spiegazione del Codice Passo per Passo
Definizione degli Array di Valutazione Utente
user1 = np.array([4, 0, 3, 5]);user2 = np.array([5, 1, 2, 4]);
Si creano due array NumPy, ciascuno rappresentante le valutazioni di un utente per quattro articoli. Questi array sono i vettori utente.
Definizione della Funzione di Similarità Coseno
def cosine_similarity(a, b):
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
- Calcolo del Prodotto Scalare:
dot_product = np.dot(a, b);
Moltiplica gli elementi corrispondenti dei due vettori e ne somma i risultati. Questo misura quanto i due vettori puntano nella stessa direzione. - Calcolo delle Norme:
norm_a = np.linalg.norm(a);norm_b = np.linalg.norm(b);
Calcola la lunghezza (modulo) di ciascun vettore utente. La norma è la radice quadrata della somma dei quadrati degli elementi del vettore. - Calcolo della Similarità:
return dot_product / (norm_a * norm_b);
Divide il prodotto scalare per il prodotto delle due norme. Il risultato è il coseno dell'angolo tra i due vettori, che indica la loro similarità.
Calcolo della Similarità Coseno e Stampa
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
La funzione viene chiamata con i vettori utente per calcolare la similarità coseno, quindi il risultato viene stampato formattato a quattro cifre decimali.
Calcolo della Correlazione di Pearson e Stampa
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Si utilizza np.corrcoef per calcolare la matrice di correlazione di Pearson per i due vettori utente. Il valore in posizione [0, 1] fornisce la correlazione tra user1 e user2. Stampando questo valore si mostra quanto i pattern di valutazione degli utenti siano linearmente correlati dopo aver rimosso il bias della valutazione media.
1. Qual è la principale differenza tra la similarità coseno e la correlazione di Pearson quando si confrontano vettori utente?
2. Quale metrica dovresti scegliere se vuoi confrontare utenti che valutano gli oggetti su scale molto diverse (ad esempio, un utente dà sempre valutazioni alte e un altro dà valutazioni basse)?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione