Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Cosinusgelijkenis en Pearson-correlatie | Collaboratief filteren en gedragsmatige matchingssystemen
Market Basket Analyse en Aanbevelingssystemen

Cosinusgelijkenis en Pearson-correlatie

Veeg om het menu te tonen

Cosinusgelijkenis

Cosinusgelijkenis is een maatstaf die de gelijkenis tussen twee vectoren kwantificeert door de cosinus van de hoek tussen hen te meten. Het wordt wiskundig gedefinieerd als:

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

waarbij A en B gebruikers- of itemvectoren zijn. Geometrisch geeft cosinusgelijkenis weer hoe uitgelijnd twee vectoren zijn, ongeacht hun grootte. Een waarde van 1 betekent dat de vectoren in dezelfde richting wijzen (maximale gelijkenis), 0 betekent dat ze orthogonaal zijn (geen gelijkenis), en -1 betekent dat ze in tegenovergestelde richting wijzen. In gedragsmatige matching is cosinusgelijkenis nuttig wanneer het patroon van voorkeuren belangrijker is dan de absolute waarden, bijvoorbeeld bij het vergelijken van gebruikers die items op verschillende schalen beoordelen.

Pearson-correlatie

Pearson-correlatie meet de lineaire relatie tussen twee vectoren, waarbij zowel de richting als het gemiddelde van de gegevens in aanmerking worden genomen. De formule is:

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

waarbij Aˉ\bar{A} en Bˉ\bar{B} de gemiddelden zijn van de vectoren A en B. Pearson-correlatie varieert van -1 (perfect negatieve lineaire relatie) tot 1 (perfect positieve lineaire relatie), met 0 als aanduiding voor geen lineaire relatie. Deze maatstaf is vooral nuttig wanneer gebruikers of items vergeleken worden na het verwijderen van individuele vooroordelen, bijvoorbeeld wanneer een gebruiker consequent hoger of lager beoordeelt dan een ander.

Vergelijking

Cosinusgelijkenis
expand arrow
  • Richt zich op de oriëntatie van de vectoren en negeert hun gemiddelde en grootte;
  • Geschikt voor schaarse data waarbij veel beoordelingen ontbreken of nul zijn, maar kan gelijkenis overschatten wanneer gebruikers systematisch verschillende beoordelingsschalen hanteren.
Pearson-correlatie
expand arrow
  • Haalt het gemiddelde uit elke vector, waardoor het robuust is tegen verschillen in schaal of basisvoorkeur;
  • Beter wanneer controle over gebruikers- of itemvooroordelen gewenst is, maar kan niet-lineaire relaties mogelijk niet vastleggen.

Voorbeeld: Beide Maten Berekenen

Stel, je hebt twee gebruikers die vier items hebben beoordeeld. Hun beoordelingen zijn:

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

Je kunt zowel de cosinusgelijkenis als de Pearson-correlatie voor deze vectoren berekenen om hun gedragsmatige gelijkenis te vergelijken.

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

Stapsgewijze Uitleg van de Code

Definiëren van Gebruikersbeoordelingsarrays

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

Je maakt twee NumPy-arrays aan, elk die de beoordelingen van een gebruiker voor vier items weergeven. Deze arrays zijn je gebruikersvectoren.

Definiëren van de Cosinusgelijkenisfunctie

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)
  • Berekening van het inwendig product: dot_product = np.dot(a, b);
    Vermenigvuldigt overeenkomstige elementen van de twee vectoren en telt deze op. Dit meet in hoeverre de twee vectoren in dezelfde richting wijzen.
  • Normberekeningen:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Berekent de lengte (magnitude) van elke gebruikersvector. De norm is de vierkantswortel van de som van de kwadraten van de elementen van de vector.
  • Gelijkenisberekening: return dot_product / (norm_a * norm_b);
    Deelt het inwendig product door het product van de twee normen. Het resultaat is de cosinus van de hoek tussen de twee vectoren, wat hun gelijkenis aangeeft.

Berekenen van Cosinusgelijkenis en Afdrukken
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Je roept de functie aan met je gebruikersvectoren om hun cosinusgelijkenis te berekenen en drukt vervolgens het resultaat af, geformatteerd tot vier decimalen.

Berekenen van Pearson-correlatie en Afdrukken
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Je gebruikt np.corrcoef om de Pearson-correlatiematrix voor de twee gebruikersvectoren te berekenen. De waarde op positie [0, 1] geeft de correlatie tussen gebruiker 1 en gebruiker 2. Het afdrukken van deze waarde toont hoe sterk de beoordelingspatronen van de gebruikers lineair gerelateerd zijn na het verwijderen van hun gemiddelde beoordelingsbias.

1. Wat is het belangrijkste verschil tussen cosinusgelijkenis en Pearson-correlatie bij het vergelijken van gebruikersvectoren?

2. Welke statistiek moet je kiezen als je gebruikers wilt vergelijken die items op zeer verschillende schalen beoordelen (bijvoorbeeld, de ene gebruiker geeft altijd hoge beoordelingen en de andere altijd lage beoordelingen)?

question mark

Wat is het belangrijkste verschil tussen cosinusgelijkenis en Pearson-correlatie bij het vergelijken van gebruikersvectoren?

Selecteer het correcte antwoord

question mark

Welke statistiek moet je kiezen als je gebruikers wilt vergelijken die items op zeer verschillende schalen beoordelen (bijvoorbeeld, de ene gebruiker geeft altijd hoge beoordelingen en de andere altijd lage beoordelingen)?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 2

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 3. Hoofdstuk 2
some-alt