Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Cosinuslighed og Pearson-korrelation | Collaborative Filtering og Adfærdsbaserede Matchingssystemer
Market Basket Analyse og Anbefalingssystemer

Cosinuslighed og Pearson-korrelation

Stryg for at vise menuen

Cosinuslighed

Cosinuslighed er en metrik, der kvantificerer ligheden mellem to vektorer ved at måle cosinus til vinklen mellem dem. Den er matematisk defineret 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}}

hvor A og B er bruger- eller elementvektorer. Geometrisk fanger cosinuslighed, hvor meget to vektorer er på linje, uanset deres størrelse. En værdi på 1 betyder, at vektorerne peger i samme retning (maksimal lighed), 0 betyder, at de er ortogonale (ingen lighed), og -1 betyder, at de peger i modsatte retninger. Ved adfærdsmatchning er cosinuslighed nyttig, når mønstret i præferencer er vigtigere end de absolutte værdier, for eksempel når man sammenligner brugere, der vurderer elementer på forskellige skalaer.

Pearson-korrelation

Pearson-korrelation måler den lineære sammenhæng mellem to vektorer og tager både retning og gennemsnit af dataene i betragtning. Formlen er:

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

hvor Aˉ\bar{A} og Bˉ\bar{B} er gennemsnittene af vektorerne A og B. Pearson-korrelation spænder fra -1 (perfekt negativ lineær sammenhæng) til 1 (perfekt positiv lineær sammenhæng), hvor 0 angiver ingen lineær sammenhæng. Denne metrik er særligt nyttig, når man ønsker at sammenligne brugere eller elementer efter at have fjernet individuelle skævheder, for eksempel når én bruger har tendens til at give alt højere eller lavere vurderinger end en anden.

Sammenligning

Cosinuslighed
expand arrow
  • Fokuserer på vektorernes orientering og ignorerer deres gennemsnit og størrelse;
  • Er et godt valg til sparsomme data, hvor mange vurderinger mangler eller er nul, men kan overvurdere lighed, når brugere systematisk har forskellige vurderingsskalaer.
Pearson-korrelation
expand arrow
  • Fjerner den gennemsnitlige vurdering fra hver vektor, hvilket gør den robust over for forskelle i skala eller grundlæggende præference;
  • Er bedre, når man ønsker at kontrollere for bruger- eller elementskævhed, men kan ikke fange ikke-lineære sammenhænge.

Eksempel: Beregning af begge metrikker

Antag, at du har to brugere, som har vurderet fire varer. Deres vurderinger er:

  • Bruger 1: [4, 0, 3, 5]
  • Bruger 2: [5, 1, 2, 4]

Du kan beregne både cosinus-lighed og Pearson-korrelation for disse vektorer for at sammenligne deres adfærdslighed.

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

Trin-for-trin kodeforklaring

Definition af brugerbedømmelses-arrays

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

Du opretter to NumPy-arrays, som hver repræsenterer en brugers vurderinger af fire varer. Disse arrays er dine brugervektorer.

Definition af cosinus-ligheds-funktion

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)
  • Beregning af prikprodukt: dot_product = np.dot(a, b);
    Multiplicerer de tilsvarende elementer i de to vektorer og summerer dem. Dette måler, hvor meget de to vektorer peger i samme retning.
  • Beregning af normer:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Beregner længden (magnituden) af hver brugervektor. Normen er kvadratroden af summen af kvadraterne af vektorens elementer.
  • Beregning af lighed: return dot_product / (norm_a * norm_b);
    Dividerer prikproduktet med produktet af de to normer. Resultatet er cosinus til vinklen mellem de to vektorer, hvilket angiver deres lighed.

Beregning af cosinus-lighed og udskrivning
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Du kalder funktionen med dine brugervektorer for at beregne deres cosinus-lighed og udskriver derefter resultatet formateret til fire decimaler.

Beregning af Pearson-korrelation og udskrivning
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Du bruger np.corrcoef til at beregne Pearson-korrelationsmatricen for de to brugervektorer. Værdien på position [0, 1] giver korrelationen mellem user1 og user2. Udskrivning af denne værdi viser, hvor stærkt brugernes vurderingsmønstre er lineært relateret efter fjernelse af deres gennemsnitlige vurderingsbias.

1. Hvad er den primære forskel mellem cosinuslighed og Pearson-korrelation, når man sammenligner brugervektorer?

2. Hvilken metrik bør du vælge, hvis du vil sammenligne brugere, der vurderer emner på meget forskellige skalaer (for eksempel én bruger giver altid høje vurderinger og en anden giver lave vurderinger)?

question mark

Hvad er den primære forskel mellem cosinuslighed og Pearson-korrelation, når man sammenligner brugervektorer?

Vælg det korrekte svar

question mark

Hvilken metrik bør du vælge, hvis du vil sammenligne brugere, der vurderer emner på meget forskellige skalaer (for eksempel én bruger giver altid høje vurderinger og en anden giver lave vurderinger)?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 3. Kapitel 2
some-alt