Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Similarità del Coseno e Correlazione di Pearson | Sistemi di Filtraggio Collaborativo e Abbinamento Comportamentale
Analisi del Carrello della Spesa e Sistemi di Raccomandazione

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=1nAiBii=1nAi2i=1nBi2\frac {\sum_{i=1}^{n} A_i B_i} {\sqrt{\sum_{i=1}^{n} A_i^2} \cdot \sqrt{\sum_{i=1}^{n} B_i^2}}

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(AiAˉ)(BiBˉ)i=1n(AiAˉ)2i=1n(BiBˉ)2\text{Pearson Correlation} = \frac{\sum_{i=1}^{n} (A_i - \bar{A})(B_i - \bar{B})}{\sqrt{\sum_{i=1}^{n} (A_i - \bar{A})^2} \cdot \sqrt{\sum_{i=1}^{n} (B_i - \bar{B})^2}}

dove Aˉ\bar{A} e Bˉ\bar{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

Similarità coseno
expand arrow
  • 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.
Correlazione di Pearson
expand arrow
  • 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.

12345678910111213141516171819
import 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)?

question mark

Qual è la principale differenza tra la similarità coseno e la correlazione di Pearson quando si confrontano vettori utente?

Seleziona la risposta corretta

question mark

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)?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 2
some-alt