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=1nAi2⋅∑i=1nBi2∑i=1nAiBi
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(Ai−Aˉ)2⋅∑i=1n(Bi−Bˉ)2∑i=1n(Ai−Aˉ)(Bi−Bˉ)
missä Aˉ ja 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
- 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.
- 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.
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}")
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)?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme