Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Kosinietäisyys ja Pearsonin korrelaatio | Yhteistyösuodatus- ja Käyttäytymisen Yhteensovitusjärjestelmät
Market Basket -analyysi ja suositusjärjestelmät

Kosinietäisyys ja Pearsonin korrelaatio

Pyyhkäise näyttääksesi valikon

Kosinietäisyys

Kosinietäisyys on mittari, joka määrittää kahden vektorin samankaltaisuuden mittaamalla niiden väliin jäävän kulman kosinin. Se määritellään matemaattisesti seuraavasti:

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

missä A ja B ovat käyttäjä- tai tuotevektoreita. Geometrisesti kosinietäisyys kuvaa, kuinka samansuuntaisia kaksi vektoria ovat, riippumatta niiden pituudesta. Arvo 1 tarkoittaa, että vektorit osoittavat samaan suuntaan (maksimaalinen samankaltaisuus), 0 tarkoittaa, että ne ovat kohtisuorassa (ei samankaltaisuutta), ja -1 tarkoittaa, että ne osoittavat vastakkaisiin suuntiin. Käyttäytymisen yhteensovittamisessa kosinietäisyys on hyödyllinen, kun kiinnostuksen kohteena on mieltymysten malli eikä niiden absoluuttiset arvot, esimerkiksi kun verrataan käyttäjiä, jotka arvioivat kohteita eri asteikoilla.

Pearsonin korrelaatio

Pearsonin korrelaatio mittaa kahden vektorin lineaarista suhdetta, huomioiden sekä suunnan että datan keskiarvon. Kaava on:

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

missä Aˉ\bar{A} ja Bˉ\bar{B} ovat vektoreiden A ja B keskiarvot. Pearsonin korrelaatio vaihtelee välillä -1 (täydellinen negatiivinen lineaarinen suhde) ja 1 (täydellinen positiivinen lineaarinen suhde), ja 0 tarkoittaa, ettei lineaarista suhdetta ole. Tämä mittari on erityisen hyödyllinen, kun halutaan vertailla käyttäjiä tai kohteita yksilöllisten vinoumien poistamisen jälkeen, esimerkiksi kun yksi käyttäjä antaa järjestelmällisesti korkeampia tai matalampia arvosanoja kuin toinen.

Vertailu

Kosinietäisyys
expand arrow
  • Keskittyy vektorien suuntaan ja jättää huomiotta niiden keskiarvon ja pituuden;
  • Hyvä valinta harvalle datalle, jossa monia arvosanoja puuttuu tai ne ovat nollia, mutta voi yliarvioida samankaltaisuutta, jos käyttäjillä on järjestelmällisesti erilaiset arviointiasteikot.
Pearsonin korrelaatio
expand arrow
  • Poistaa jokaisesta vektorista keskimääräisen arvosanan, mikä tekee siitä kestävän asteikko- tai lähtötasomuutoksille;
  • Parempi, kun halutaan huomioida käyttäjä- tai kohdevinouma, mutta ei välttämättä tunnista epälineaarisia suhteita.

Esimerkki: Molempien mittareiden laskeminen

Oletetaan, että sinulla on kaksi käyttäjää, jotka ovat arvioineet neljä tuotetta. Heidän arvionsa ovat:

  • Käyttäjä 1: [4, 0, 3, 5]
  • Käyttäjä 2: [5, 1, 2, 4]

Voit laskea sekä kosinietäisyyden että Pearsonin korrelaation näille vektoreille vertaillaksesi heidän käyttäytymisensä samankaltaisuutta.

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

Koodin vaiheittainen selitys

Käyttäjäarvioiden taulukoiden määrittely

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

Luodaan kaksi NumPy-taulukkoa, jotka edustavat käyttäjien arvioita neljästä tuotteesta. Nämä taulukot ovat käyttäjävektorit.

Kosinietäisyysfunktion määrittely

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)
  • Pistetulon laskeminen: dot_product = np.dot(a, b);
    Kertoo vektorien vastaavat alkiot keskenään ja laskee summan. Tämä mittaa, kuinka paljon vektorit osoittavat samaan suuntaan.
  • Normien laskeminen:
    norm_a = np.linalg.norm(a);
    norm_b = np.linalg.norm(b);
    Laskee kummankin käyttäjävektorin pituuden (normin). Normi on vektorin alkioiden neliöiden summan neliöjuuri.
  • Samankaltaisuuden laskeminen: return dot_product / (norm_a * norm_b);
    Jakaa pistetulon normien tulolla. Tulos on vektorien välisen kulman kosini, joka ilmaisee niiden samankaltaisuuden.

Kosinietäisyyden laskeminen ja tulostaminen
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
Kutsutaan funktiota käyttäjävektoreilla ja lasketaan niiden kosinietäisyys, jonka jälkeen tulos tulostetaan neljän desimaalin tarkkuudella.

Pearsonin korrelaation laskeminen ja tulostaminen
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Käytetään np.corrcoef-funktiota Pearsonin korrelaatiomatriisin laskemiseen käyttäjävektoreille. Arvo kohdassa [0, 1] antaa korrelaation käyttäjien välillä. Tämän arvon tulostaminen osoittaa, kuinka vahvasti käyttäjien arviointimallit ovat lineaarisesti yhteydessä toisiinsa, kun keskimääräinen arviointitaso on poistettu.

1. Mikä on tärkein ero kosiniinisen samankaltaisuuden ja Pearsonin korrelaation välillä käyttäjävektoreita verrattaessa?

2. Mitä mittaria tulisi käyttää, jos haluat verrata käyttäjiä, jotka arvioivat kohteita hyvin eri asteikoilla (esimerkiksi toinen käyttäjä antaa aina korkeita arvosanoja ja toinen matalia arvosanoja)?

question mark

Mikä on tärkein ero kosiniinisen samankaltaisuuden ja Pearsonin korrelaation välillä käyttäjävektoreita verrattaessa?

Valitse oikea vastaus

question mark

Mitä mittaria tulisi käyttää, jos haluat verrata käyttäjiä, jotka arvioivat kohteita hyvin eri asteikoilla (esimerkiksi toinen käyttäjä antaa aina korkeita arvosanoja ja toinen matalia arvosanoja)?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 3. Luku 2
some-alt