Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Cosinuslikhet och Pearson-korrelation | Samarbetsfiltrering och Beteendematchningssystem
Market Basket Analysis och Rekommendationssystem

Cosinuslikhet och Pearson-korrelation

Svep för att visa menyn

Kosinuslikhet

Kosinuslikhet är ett mått som kvantifierar likheten mellan två vektorer genom att mäta cosinus för vinkeln mellan dem. Det definieras matematiskt som:

Cosine Similarity = 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}}

där A och B är användar- eller objektvektorer. Geometriskt fångar kosinuslikhet hur välriktade två vektorer är, oavsett deras storlek. Ett värde på 1 innebär att vektorerna pekar i samma riktning (maximal likhet), 0 innebär att de är ortogonala (ingen likhet), och -1 innebär att de pekar i motsatta riktningar. Inom beteendematchning är kosinuslikhet användbar när mönstret av preferenser är viktigare än de absoluta värdena, till exempel när man jämför användare som betygsätter objekt på olika skalor.

Pearsonkorrelation

Pearsonkorrelation mäter det linjära sambandet mellan två vektorer och tar hänsyn till både riktning och medelvärde för data. Formeln är:

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}}

Där Aˉ\bar{A} och Bˉ\bar{B} är medelvärdena för vektorerna A och B. Pearsonkorrelation varierar från -1 (perfekt negativt linjärt samband) till 1 (perfekt positivt linjärt samband), där 0 indikerar inget linjärt samband. Detta mått är särskilt användbart när du vill jämföra användare eller objekt efter att ha tagit bort individuella bias, till exempel när en användare tenderar att ge allt högre eller lägre betyg än en annan.

Jämförelse

Kosinuslikhet
expand arrow
  • Fokuserar på vektorernas orientering och ignorerar deras medelvärde och storlek;
  • Ett bra val för glesa data där många betyg saknas eller är noll, men kan överskatta likheten när användare har systematiskt olika betygsskalor.
Pearsonkorrelation
expand arrow
  • Tar bort medelbetyget från varje vektor, vilket gör det robust mot skillnader i skala eller grundläggande preferens;
  • Bättre när du vill kontrollera för användar- eller objektbias, men kan missa icke-linjära samband.

Exempel: Beräkning av båda måtten

Anta att du har två användare som har betygsatt fyra objekt. Deras betyg är:

  • Användare 1: [4, 0, 3, 5]
  • Användare 2: [5, 1, 2, 4]

Du kan beräkna både cosinuslikhet och Pearson-korrelation för dessa vektorer för att jämföra deras beteendemässiga likhet.

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}")

Steg-för-steg-förklaring av koden

Definiera användarnas betygsvektorer

  • user1 = np.array([4, 0, 3, 5]);
  • user2 = np.array([5, 1, 2, 4]);

Två NumPy-arrayer skapas, där varje array representerar en användares betyg för fyra objekt. Dessa arrayer är användarvektorer.

Definiera funktionen för cosinuslikhet

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)
  • Beräkning av skalärprodukt: dot_product = np.dot(a, b);
    Multiplicerar motsvarande element i de två vektorerna och summerar dem. Detta mäter hur mycket vektorerna pekar i samma riktning.
  • Beräkning av normer:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Beräknar längden (magnituden) av varje användarvektor. Normen är kvadratroten av summan av kvadraterna av vektorns element.
  • Beräkning av likhet: return dot_product / (norm_a * norm_b);
    Dividerar skalärprodukten med produkten av de två normerna. Resultatet är cosinus för vinkeln mellan vektorerna, vilket indikerar deras likhet.

Beräkning och utskrift av cosinuslikhet
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Funktionen anropas med användarvektorerna för att beräkna deras cosinuslikhet, och resultatet skrivs ut med fyra decimalers noggrannhet.

Beräkning och utskrift av Pearson-korrelation
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
np.corrcoef används för att beräkna Pearson-korrelationsmatrisen för de två användarvektorerna. Värdet på position [0, 1] ger korrelationen mellan user1 och user2. Utskriften visar hur starkt användarnas betygsmönster är linjärt relaterade efter att deras genomsnittliga betygsbias tagits bort.

1. Vad är den största skillnaden mellan cosinuslikhet och Pearson-korrelation när man jämför användarvektorer?

2. Vilken metod bör du välja om du vill jämföra användare som betygsätter objekt på mycket olika skalor (till exempel en användare som alltid ger höga betyg och en annan som ger låga betyg)?

question mark

Vad är den största skillnaden mellan cosinuslikhet och Pearson-korrelation när man jämför användarvektorer?

Vänligen välj det korrekta svaret

question mark

Vilken metod bör du välja om du vill jämföra användare som betygsätter objekt på mycket olika skalor (till exempel en användare som alltid ger höga betyg och en annan som ger låga betyg)?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 3. Kapitel 2
some-alt