Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Cosinuslikhet og Pearson-korrelasjon | Samarbeidsfiltrering og atferdsbaserte matchingssystemer
Market Basket Analysis og Anbefalingssystemer

Cosinuslikhet og Pearson-korrelasjon

Sveip for å vise menyen

Kosinuslikhet

Kosinuslikhet er et mål som kvantifiserer likheten mellom to vektorer ved å måle kosinus til vinkelen mellom dem. Det er matematisk definert 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 bruker- eller elementvektorer. Geometrisk fanger kosinuslikhet opp hvor godt to vektorer er på linje, uavhengig av størrelsen deres. En verdi på 1 betyr at vektorene peker i samme retning (maksimal likhet), 0 betyr at de er ortogonale (ingen likhet), og -1 betyr at de peker i motsatt retning. Ved atferdsmatching er kosinuslikhet nyttig når mønsteret i preferansene er viktigere enn de absolutte verdiene, for eksempel når man sammenligner brukere som vurderer elementer på ulike skalaer.

Pearson-korrelasjon

Pearson-korrelasjon måler det lineære forholdet mellom to vektorer, og tar hensyn til både retning og gjennomsnittet av dataene. Formelen 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 gjennomsnittene til vektorene A og B. Pearson-korrelasjon varierer fra -1 (perfekt negativt lineært forhold) til 1 (perfekt positivt lineært forhold), med 0 som indikerer intet lineært forhold. Dette målet er spesielt nyttig når man ønsker å sammenligne brukere eller elementer etter å ha fjernet individuelle skjevheter, for eksempel når én bruker har en tendens til å gi alt høyere eller lavere vurderinger enn en annen.

Sammenligning

Kosinuslikhet
expand arrow
  • Fokuserer på orienteringen til vektorene og ignorerer både gjennomsnitt og størrelse;
  • Et godt valg for spredte data der mange vurderinger mangler eller er null, men kan overvurdere likhet når brukere har systematisk ulike vurderingsskalaer.
Pearson-korrelasjon
expand arrow
  • Fjerner gjennomsnittsvurderingen fra hver vektor, noe som gjør den robust mot forskjeller i skala eller grunnleggende preferanse;
  • Bedre når man ønsker å kontrollere for bruker- eller elementskjevhet, men kan ikke fange opp ikke-lineære sammenhenger.

Eksempel: Beregning av begge metrikker

Anta at du har to brukere som har vurdert fire elementer. Deres vurderinger er:

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

Du kan beregne både cosinuslikhet og Pearson-korrelasjon for disse vektorene for å sammenligne deres atferdslikhet.

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

Trinnvis forklaring av koden

Definering av brukerens vurderingsarrayer

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

Du oppretter to NumPy-arrayer, hver som representerer en brukers vurderinger for fire elementer. Disse arrayene er brukerens vektorer.

Definering av cosinuslikhetsfunksjonen

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 av skalarprodukt: dot_product = np.dot(a, b);
    Multipliserer tilsvarende elementer i de to vektorene og summerer dem. Dette måler hvor mye de to vektorene peker i samme retning.
  • Beregning av normer:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Beregner lengden (magnituden) til hver brukervektor. Normen er kvadratroten av summen av kvadratene til vektorens elementer.
  • Beregning av likhet: return dot_product / (norm_a * norm_b);
    Dividerer skalarproduktet med produktet av de to normene. Resultatet er cosinus til vinkelen mellom de to vektorene, som indikerer deres likhet.

Beregning av cosinuslikhet og utskrift
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Du kaller funksjonen med brukervektorene for å beregne deres cosinuslikhet, og skriver deretter ut resultatet formatert til fire desimaler.

Beregning av Pearson-korrelasjon og utskrift
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Du bruker np.corrcoef for å beregne Pearson-korrelasjonsmatrisen for de to brukervektorene. Verdien på posisjon [0, 1] gir korrelasjonen mellom bruker 1 og bruker 2. Utskrift av denne verdien viser hvor sterkt brukernes vurderingsmønstre er lineært relatert etter at gjennomsnittlig vurderingsskjevhet er fjernet.

1. Hva er hovedforskjellen mellom cosinuslikhet og Pearson-korrelasjon når man sammenligner brukervektorer?

2. Hvilken metrikk bør du velge hvis du vil sammenligne brukere som vurderer elementer på svært forskjellige skalaer (for eksempel at én bruker alltid gir høye vurderinger og en annen gir lave vurderinger)?

question mark

Hva er hovedforskjellen mellom cosinuslikhet og Pearson-korrelasjon når man sammenligner brukervektorer?

Velg det helt riktige svaret

question mark

Hvilken metrikk bør du velge hvis du vil sammenligne brukere som vurderer elementer på svært forskjellige skalaer (for eksempel at én bruker alltid gir høye vurderinger og en annen gir lave vurderinger)?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 2
some-alt