Bruker-Bruker Samarbeidsfiltrering For Vitser Anbefaling

La oss dykke i detalj og se på ulike konfigurasjonspunkter for hvert trinn.

Data Normalisering

Rangeringer er sterkt påvirket av omfanget av enkeltpersoner. Noen individer er godhjertet mens vurdering og har en tendens til å rangere høyt, mens andre er bare kaldhjertet og har en tendens til å gi middels karakterer for godt innhold. Normalisering er en måte å kompensere for en slik brukers oppførsel ved å justere skalaen av vurdering for å være sammenlignbar eller på samme nivå med andre brukers vurderinger.

En enkel teknikk for å normalisere rangeringer er å trekke fra vurdering gjennomsnittet av hver bruker fra sine karakterer.

her er python-implementeringen av normaliseringen.

def normalization(dataframe):
dataframe_mean = dataframe.mean(axis=1)
return dataframe.subtract(dataframe_mean, axis = 'rows')

la oss implementere denne metoden for vitser datasettet. For demonstrasjonsformål vil vi velge rangeringer av 10 brukere for de første 10 vitsene.

kilde: bilde av forfatter

vi kan også implementere andre konfigurasjoner ved normaliseringstrinnet.

Z-score Er en annen mulig måte å normalisere rating data der normalisert verdi forteller om hvor mange standardavvik fra gjennomsnittet vår score er.

computing likhet

likhetsberegning mellom brukere er hovedoppgaven i samarbeidsfiltreringsalgoritmer. Likheten mellom brukere (også kjent som avstanden mellom brukere) er en matematisk metode for å kvantifisere hvor forskjellige eller lignende brukere er til hverandre. For En Bruker-BRUKER CF-algoritme beregnes likhet, sim ₓᵧ mellom brukerne x og y som begge har vurdert de samme elementene først. For å beregne denne likheten brukes ulike beregninger. Vi vil bruke korrelasjonsbaserte likhetsmålinger for å beregne likheten mellom bruker x og bruker y, sim ₓᵧ ved hjelp av pearson Korrelasjon

valget av pearson-korrelasjon gir mening fordi likhetsmålinger som vurderingsdata for hver bruker pleier å være normalfordelt. Som andre korrelasjonskoeffisienter varierer denne mellom -1 og + 1 med 0 som betyr ingen korrelasjon. Korrelasjoner av -1 eller +1 innebærer et eksakt lineært forhold. Positive korrelasjoner mellom bruker x og bruker y innebærer at hvis bruker x har vurdert en vits som positiv, er det en veldig stor sjanse for at bruker y også vil vurdere positivt til samme vits.

Her er python-implementeringen av Pearson-Korrelasjonen ved hjelp av scipy-pakken.

def similarity_pearson(x, y):
import scipy.stats
return scipy.stats.pearsonr(x, y)

nå implementerer vi den ovennevnte metoden for å finne Pearson likhet for vurderingsdatasettet. Vær oppmerksom på at her vurderer vi likhet ved hjelp av ratings datasett og ikke av normaliserte ratings datasett fordi Pearson Korrelasjonsmetoden tar seg av normaliseringstrinnet!

Kilde: Bilde av forfatter

vi kan også implementere andre konfigurasjoner på likheten beregning trinn.Cosinus Likhet er en annen mulig konfigurasjon for å beregne likhet mellom to brukere ved å beregne cosinus av vinklene mellom to vurderingsvektorer og avgjøre om begge vektorer peker i omtrent samme retning. Cosinus likhet er en ofte brukt til å måle dokument likhet i tekstanalyse.

valg av naboer

uucf-tilnærming (user-user collaborative filtering) er avhengig av aktiv brukerinformasjon i nabolaget for å gjøre spådommer og anbefalinger. Nabolaget utvalg kan enten gjøre eller bryte anbefaling for en aktiv bruker, og kan ha en direkte betydning for vurdering prediksjon og element anbefaling.for tiden har ethvert kommersielt anbefalingssystem et meget stort antall brukere, og dermed må nabolaget være sammensatt av delmengden av brukerne hvis anbefalingssystemet ønsker å garantere en akseptabel responstid.

figuren nedenfor viser fire tradisjonelle tilnærminger for å velge nabolag.

kilde: Bilde av forfatter

  1. Bruk alle datasett når datasettet er veldig lite
  2. Velg datasett når likhetsscore er over en viss terskel
  3. Velg topp n datasett ved likhetsscore
  4. Velg en lignende klynge ved hjelp Av en klyngemetode Som K-Mean

vi vil bruke terskeltilnærmingen til å velg nabolag for en aktiv bruker. La oss utpeke brukeren på index 2 som vår aktive bruker.

Bilde etter forfatter

/figcaption>

den aktive brukeren har bare lest 4 av 10 vitser, så vi vil finne ut hvilken vits ut av de resterende 6 vil være den beste anbefalingen for den aktive brukeren.

La oss velge en terskel på 0,1 eller høyere for å filtrere ut naboene.

her er python-implementeringen for å finne lignende naboer ved hjelp av terskelmetoden. Her» sim » innebærer for likhet rekke pandaer serien type.

def neighbours(sim):
return for i, v in enumerate(sim) if v>=0.1]

her er skjermbilde av likheten array for vår aktive bruker. Vennligst sørg for å slippe aktiv brukers egen likhet med seg selv før du arbeider.

Kilde: Bilde av forfatter

vi skal implementere»naboer»metode for likheten array.

bilde etter forfatterfigcaption>

som det fremgår av skjermbildet ovenfor, er det bare brukere med indeks 3, 4, 6, 9 som kvalifiserer til å være naboer.

Men i et kommersielt anbefalingssystem som har et veldig stort antall data, kan vi ende opp med et stort antall naboer hvis vi går med terskelmetoden. Så spørsmålet oppstår, hvor mange naboer?

Teoretisk sett, jo mer jo bedre, hvis vi har en god likhetsmatrise. Men praktisk talt, støy fra ulike naboer reduserer nytten. hvis vi blander mange lave likhetsnaboer, kan forskjellen fra målbrukeren begynne å forringe kvaliteten på anbefalingen. Mellom 25-100, er høy likhet naboer ofte brukt i praktisk og kommersiell anbefaling system.

Scoring Elementer

Scoring elementer ved hjelp av nabolaget rangeringer er selve kjernen i å lage en samarbeidende filtrering modell. Det vektede gjennomsnittet er en av de vanligste metodene for å konstruere et slikt scoring system. Vi vil bruke vektet gjennomsnitt for å beregne scoring for våre elementer.

The first step is to select only those items which hadn’t yet been rated by the active user

Image by author

i vårt tilfelle er det joke_1, joke_2, joke_3, joke_4, joke_9 og joke_10. Siden de resterende fire vitsene allerede er vurdert, vil vi ikke score disse elementene.

nedenfor er skjermbildet av neighbor_rating og neighbor_similarity pandas dataframe. Vi vil disse to dataframes og karakterer dataframe å lage score for hver spøk. Merk at her bruker vi normalisert rating dataframe for å finne neighbor_rating.

Source: Image by author

Here is the python implementation to calculate the score of the items.

def score_item(neighbor_rating, neighbor_similarity, ratings ):
# aumr -> active user mean rating
aumr = np.mean(ratings.iloc)
score = np.dot(neighbor_similarity, neighbor_rating) + aumr
data = score.reshape(1, len(score))
columns = neighbor_rating.columns
return pd.DataFrame(data = data , columns = columns)

We will implement «score_item” method to find the score of all the jokes.

Source: Bilde av forfatter

Her er det tydelig at joke_2 har høyest poengsum, og joke_4 har lavest.

Elementer Utvalg

Når elementet scoring er avgjort, vil elementet med maksimal score være den beste anbefalingen. Dermed i vårt tilfelle vil joke_2 være den mest passende anbefalingen til vår aktive bruker.

Anbefal Joke 2 til vår aktive bruker

det er imidlertid stor sjanse for at anbefalingen ved å bruke denne metoden kan mette til bare noen få anbefalinger hver gang. Dette kan føre til en forringelse av anbefalingskvaliteten.

en enkel løsning på dette problemet er å ta topp n positivt scoret elementer og tilfeldig anbefale en av dem.

Fallgruver Bruker – Bruker Samarbeidsfiltrering

Bruker-Bruker Samarbeidsfiltreringssystemer har vært svært vellykkede tidligere, men deres utbredt bruk har avslørt noen virkelige utfordringer. La oss kort diskutere de fire hovedutfordringene ved å bruke et slikt system:

Kaldstart :

hvis en bruker er ny, kan ikke likheten med andre brukere beregnes, da systemet kanskje ikke har noen form for data på denne nye brukeren.

Skalerbarhet:

Som antall brukere eller elementer begynte å øke, så bruker-bruker samarbeidsfiltrering lider en nedgang i ytelse på grunn av veksten i likhet beregning.

Data Sparsity:

med store element sett, et lite antall karakterer, ofte er det situasjoner der ingen riktig anbefaling kan gjøres for brukeren.

Påvirke:en organisasjon eller person kan bevisst manipulere prediksjon som blir gjort for andre ved å opprette flere sivile kontoer og sette falske karakterer.

Konklusjon

Bruker-Bruker Samarbeidsfiltrering er den mest brukte og studerte teknologien for å lage anbefalinger og har blitt utbredt over hele bransjen. Kjernekonseptet bak denne tilnærmingen er at » lignende brukere har en tendens til å ha lignende smak.»

i denne bloggen har VI presentert UUCF-tilnærmingen og dens praktiske anvendelse på vitser-anbefalingen ved hjelp av 5-trinns prosess. Vi har også vist muligheten for varianter av konfigurasjonspunkter ved hvert av disse trinnene.på mange av disse trinnene valgte vi ikke det beste resultatet, men et mer tilfeldig valg ut av de akseptable valgene. Dette er den viktigste ironien i anbefalingssystemet, da vi ikke ser etter det beste resultatet, og litt tilfeldighet er alltid velkommen av brukeren og er nødvendig ellers blir hele opplevelsen monotont.

  1. http://eigentaste.berkeley.edu/dataset/
  2. https://github.com/abbi163/Jester-Joke-Recommender-System

  3. Marwa Hussien Mohamed, Mohamed Helmy Khafagy, Mohamed Hasan Ibrahim. «Recommender Systems Challenges and Solutions Survey» (engelsk). ITCE ‘ 2019, Aswan, Egypt, 2. -4. februar 2019
  4. Zhipeng Zhang, Yasuo Kudo og Tetsuya Murai. «Nabovalg for brukerbasert samarbeidsfiltrering ved hjelp av dekkbaserte grove sett». Annals Of Operations Research, Nov 8, 2016
  5. Dietmar Jannach, Markus Zanker, Alexander Felfering og Gerhard Friedrich. «Recommender System, En Introduksjon». Cambridge University Press, 2011
  6. Rounak Banik, «Hands-On Anbefaling Systemer Med Python». Paktpublisering, 2018
  7. Coursera. Kurs på «Nærmeste Nabo Collaborative Filtering», Av University Of Minnesota. Uke 1 Og Uke 2.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.