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=1nAi2⋅∑i=1nBi2∑i=1nAiBi
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(Ai−Aˉ)2⋅∑i=1n(Bi−Bˉ)2∑i=1n(Ai−Aˉ)(Bi−Bˉ)
hvor Aˉ og 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
- 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.
- 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.
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}")
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)?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat