Ülevaade soovitussüsteemist ja kuidas seda nullist rakendada

See ajaveeb sisaldab soovitussüsteemide ülevaadet, sealhulgas ajalugu, olevikku, tulevikku, selle erinevaid kategooriaid ja lõpuks naljasoovituse töötlemiseks koodi.

Foto autor Edo Nugroho saidil Unsplash

Minevik olevik ja tulevik:

Kui vaadata soovitussüsteemi ajalugu, siis see idee süttis aastatel 1992–1996. Enne soovitussüsteemide kujutlemist, isegi enne, kui inimesed rääkisid ühiselt filtreerimisest, nimetati seda isikupärastamiseks. Kuid see kõik oli käsitsi. Näiteks: Reisibüroo juures, kes teab, et olete safarist huvitatud, hoiab ta silmad seda tüüpi reisil, mida soovite, mitte lihtsalt midagi sellist, mida keegi teha tahaks. Teise näitena: isiklikel ostlejatel oli mõned lihtsad andmebaasid, kus nad saaksid uute toodete turule tulekul inimeste profiile läbi käia ja saada aimu, keda nad võiksid kaaluda, mis oleks uue toote jaoks hea kandidaat. 2007. aastal kuulutas Netflix välja 1 miljoni dollari suuruse konkursi ja see muutis soovitussüsteemi käiku. See meelitas konkursil osalema paljude taustaga inimesi. Koos uute matemaatiliste valemitega tekkisid uued algoritmid. Muide, üllatusraamatukogu, mida ma naljasoovitussüsteemi loomiseks kasutan, on täielikult välja töötatud, hoides silma peal Netflixi auhinna võitnud meeskonna avaldatud uurimistööl. Vaadates tulevikku, on veel palju asju, mida me ei tea. Ajaliste soovituste probleem. Kuidas sisestada oma soovitused mitte ainult sellistesse asjadesse nagu aastaaeg, mille kallal inimesed on mõnda aega töötanud, vaid ka järjekorda, mida te järgmine kord tarbisite, arvestades, et olete seda juba tarbinud. Soovitused hariduseks, mis on üks valdkondi, olid ajalised küsimused.

Soovitussüsteemi lai jaotus:

Peamiselt on olemas kaks soovitussüsteemi kategooriat. 1. Ühine filtreerimine 2. Sisupõhine filtreerimine

Ühine filtreerimine: koostööpõhise filtreerimise võti põhineb eeldusel, et inimesed, kes on varem kokku leppinud, nõustuvad tulevikus ja et neile meeldivad sarnased esemed, mis neile varem meeldisid. Kolm peamist kategooriat koostöös tehtavate filtreerimiste jaoks on: 1. Kasutaja ja kasutaja sarnasus 2. Üksuse üksuse sarnasus 3. Mudelil põhinev

Kasutaja-kasutaja ja üksuse-üksuse sarnasus

Sisupõhine filtreerimine: sisupõhised filtreerimismeetodid põhinevad üksuse kirjeldusel ja kasutaja eelistuste profiilil. Need meetodid sobivad kõige paremini olukordades, kus üksuse kohta on teada andmed (nimi, asukoht, kirjeldus jne), kuid mitte kasutaja kohta.

Koostööpõhine vs sisupõhine soovitus

Eeltingimus

1.Põhiline Python 2.Põhiline panda 3.Ermastus üllatusraamatukogu uurimiseks 4. Keras (valikuline)

Kui soovite otse koodide juurde minna, minge sellele githubi lingile ja leidke jupyteri märkmik.

Ma seletan kõiki peamisi samme, mida olen probleemi lahendamisel järginud, kuid usun kindlalt, kui olete huvitatud probleemi täielikust selgitusest ja soovite teada üllatusraamatukogu kasutamise kohta, peate pärast selle läbimist tutvuma git repoga. ajaveeb.

Alustagem. Mõned põhiandmed andmete kohta, mida me kasutame.

Andmete kirjeldus

Nüüd teen plaani lähenemiseks probleemile ja liigun aeglaselt lahenduse poole. Me läbime koodilõikudega kõik sammud. 1. Andmete kogumine 2. Rongitesti jagamine 3. Lihtne statistika 4. Struktuuriandmed ühilduvasse vormingusse üllatusteeki 5. Veamõõdiku määratlemine 6. Baasmudeli kasutamine 7. Proovige erinevaid mudeleid 8. Tulemus

Andmete kogumine

  1. Andmetes on 3 exceli lehte. Me liidame need kokku ja moodustatakse kombineeritud python panda dataFrame. Meil on kokku 73421 kasutajat.
Ühendage kõik andmed

2. Nagu andmestiku teabes on kirjeldatud, tähendab hinnang 99, et kasutaja pole seda nalja hinnanud. Eemaldame need kirjed ja koostame andmed vormingus ['user_id', 'joke_id', 'rating'].

Andmete ettevalmistamine

Rongikatse jagunemine

Kasutame scikit-learning train_test_split ja jagame andmed 70–30. 70% andmeid on saadaval rongi ja 30% testide kohta

Põhistatistika

1. Keskmine hinnang kasutaja ja nalja kohta

kõigi kasutajate reitingu jaotuskõigi naljade reitingu jaotus

Struktuuri andmed üllatusraamatukogu ühilduvasse vormingusse

Andmed struktureeritakse üllatusraamatukogu järgi. See aktsepteerib andmeid järgmises vormingus: ['kasutaja', 'nali', 'hinnang']. Kui meil oleks probleeme filmi soovitustega, oleksime struktureerinud andmed järgmiselt: '' kasutaja ',' film ',' hinnang '].

valmistada andmeid üllatusraamatukogu stiilis

Veameetri määratlemine

kasutame veamõõdikuna normaliseeritud keskmist absoluutset viga.

Normaliseeritud keskmise absoluutse vea (NAME) valemkood NMAE arvutamiseks

Baasmudeli kasutamine

Loome baasjoone mudeli, kasutades üllatusraamatukogu antud algmodelli. Baasmudel annab 0,2033 NMAE. Proovime erinevaid üllatusmudeleid ja paremate tulemuste saamiseks ühendame kõik tulemused.

Proovige erinevaid mudeleid

  1. KNN-i alusmudel: see kasutab sarnasustepõhist tehnikat, et ennustada kasutajate reitingut uute naljade jaoks. Meie puhul on NMAE viga 0,196

2. XGBoost on userAverageRating, jokeAverageRating, algtaseme väljund ja KNN Baseline väljund: oleme ühendanud kõik eelmise üllatusmudeli väljundid ja käivitanud andmetel pärast hüperparameetrite häälestamist XGB regressioonimudelit. Siin saame pisut parema tulemuse 0,1928 NMAE

3. SVD mudel: SVD mudel kasutab maatriksi komplekteerimise probleemi lahendamiseks maatriksite faktoriseerimise tehnikaid ja ennustab reitingut.

4. XGBoost on userAverageRating, jokeAverageRating, algtaseme väljund, KNN Baseline väljund ja SVD mudeli väljund. See mudel annab 0,18 NMAE ja on seni parim.

5. Funktsioonitehnikaga mudel: mul on kaks lihtsat funktsiooni, et kontrollida nende mõju mudelile. Üks funktsioon on kasutaja_keskmine + joke_avg-global_avg. See mudel annab tavalise NMAE kui 20,2. Olin proovinud ka muid funktsioone-tehnikaid. Ka need ei töötanud hästi.

6. Depp-õppemudelite kasutamine keras: Kuna funktsioonide projekteerimine ei töötanud hästi, plaanin proovida mõnda lihtsat närvivõrgu mudelit, kasutades kerasid. Proovisin 3 erinevat mudelit. Üks kõigi põhifunktsioonidega nagu kasutaja keskmine, nalja keskmine - teine ​​ja kolmas kõigi funktsioonidega, kuid erineva ülesehitusega. Ühel mudelil oli NMAE 14,9%.

Tulemused

Nagu näeme, töötab Second_NN mudel kõige paremini, kuna sellel on väikseim testiviga.

Lõplikud mõtted

Nagu me kõik teame, pole ükski mudel täiuslik. Selles mudelis on ja on alati arenguruumi. Võib proovida erinevaid funktsioone projekteerimise tehnikat, mõned domeeniekspertide nõuanded ja erinevad närvivõrkude arhitektuurid võivad viia paremate mudeliteni.

Teise märkusena võin öelda, et soovitussüsteemid kasvavad nüüd päevaga. Üllatusraamatukogu muudab arendajate elu palju lihtsamaks, andes kõigile kuulsatele mudelitele rakenduse. Põhisoovitussüsteemi loomiseks on see tõesti kasulik. Arvan, et olen selle ajaveebi kirjutamise eesmärgi täitnud ja andnud arendajatele teada väikese kodeerimise sissejuhatusega üllatusraamatukogust. Kogu kood on siin saadaval git.