Cvika z Informačních modelů NDBI037 6.1. 2014 - program
Ladislav Peška, S309, peska@ksi.mff.cuni.cz
- Souhrn soutěže z pohledu zadavatele viz. logfile a slidy ke cvičení 6.1. 2014
- Prezentace jednotlivých řešení
- Diskuze, Lessons learned, future work atd.
- Udělování zápočtů
Cvika z Informačních modelů NDBI037 25.11. 2014 - program
Slidy ke cvičení 25.11. 2014
- Zpovozněna tabulka hiscore k soutěži
- Dodány základní baseliny, které byste měli být schopni překonat
- Na cvikách jsme probrali dvě varianty nearest neighbor algrtimů a učení modelu desetiboje. Pokud chcete používat jiné algoritmy, doporučuju ke zvážení především Rozhodovací stromy
- Jako úvod do různých algoritmů učení uživatelských preferencí můžete použít DP Marie Kukharové (diplomka prozatím není hotová a odevzdaná, ale z průběžného textu jsem vybral části týkající se algoritmů samotných + reference na podrobnější informace. Najdete tam především rozhodovací stromy a částečně i další algoritmy strojového učení.)
Text DP je zde.
- Do tabulky nejlepších výsledků jsem přidal na ukázku poměrně jednoduchou variantu Nearest Neighbors algoritmu založeného na podobnosti atributů objektů jak jsme probírali na cvičení. I tento jednoduchý algoritmus podstatně překonává požadované baseliny, takže požadavky na zápočet zůstávají:-)
- Zveřejněn byl také algoritmus pro generování uživatelských preferencí a ratingů. PHP zdroják k dispozici zde.
Cvika z Informačních modelů NDBI037 11.11. 2014 - program
Slidy ke cvičení 11.11. 2014
- Uživatelské preference (UP) a doporučování - zápočtová soutěž
Jedna z ne příliš známých aplikací metod strojového učení jsou doporučovací systémy. Doporučovací systém má za cíl(obvykle na nějaké webové stránce) fungovat jako doplněk ke klasickému vyhledávání či katalogové struktuře a na základě zjištěných preferencí uživatele mu doporučit objekt(y), které by pro něj byly vhodné, ale které by zároveň jen složitě hledal, nebo o jejich možné existenci ani neví.
V rámci Vaší zápočtové práce si zkusíte takový doporučovací systém sami naprogramovat. Samozřejmě původní use-case dost zásadně zjednodušíme. Zaměříme se pouze na tzv. off-line experimenty, kde použijeme dříve získaná data o chování uživatelů, z první části se pokusíme naučit preference jednotlivých uživatelů (trénovací sada) a druhou část použijeme k ověření našeho modelu UP (testovací sada).
Budeme chtít znát pouze předpokládané hodnocení uživatele k předem zadaným objektům (testovací sada) a porovnáme je s jejich skutečným hodnocením.
Vašim cílem tedy bude napsat program, který na vstupu zpracovává hodnocení objektů uživateli a atributy objektů a následně pro libovolný pár uživatel-objekt spočítá předpokládané hodnocení tohoto objektu zadaným uživatelem.
Zvolená platforma / programovací jazyk není podstatný (použijte váš oblíbený). Hodnocení bude prováděno pouze na základě dodaných predikcí (ale zdrojáky samozřejmě ve finále odevzdáváte taky - jen pro kontrolu).
- Vstupní a výstupní data
Váš program bude zpracovávat následující soubory:
- Soubor známého uživatelského hodnocení train100.csv (trénovací sada) = CSV soubor ve tvaru:
user_id, | object_id, | rating
|
---|
1, | 1125, | 0.45
|
1, | 1446, | 0.22
|
2, | 1588, | 0
|
..., | ..., | ...
|
kde user_id je identifikátor uživatele (integer), object_id je identifikátor objektu (integer) a hodnocení je bodové hodnocení daného objektu uživatelem z intevalu [0,1] (real), 1=nejlepší, 0=nejhorší
- Soubor atributů objektu items.csv = CSV soubor ve tvaru:
object_id, | vyrobce, | model, | rok_vyroby, | najete_km, | objem, | vykon, | palivo, | spotreba, | cena
|
---|
414, | fiat, | fiat-ulysse, | 2002, | 105759, | 2179, | 94, | diesel, | 7.4, | 690
|
422, | bmw, | bmw-rad-3-touring, | 2008, | 134607, | 1995, | 105, | benzín, | 6, | 4100
|
498, | nissan, | nissan-qashqai, | 2008, | 76445, | 1461, | 78, | diesel, | 5.4, | 13099
|
..., | ..., | ..., | ..., | ..., | ..., | ..., | ..., | ..., | ...
|
kde object_id je identifikátor objektu (integer) a další sloupce obsahují jednotlivé atributy daného objektu (auta).
Pozn.: Výkon je udávána v kW, spotřeba v litrech/100km, cena v Eurech. Dataset je cca 2 roky starý (dnes už by ceny byly trochu jiné).
- Soubor neznámého uživatelského hodnocení test100.csv (testovací sada) = CSV soubor ve tvaru:
user_id, | object_id
|
---|
1, | 1125
|
1, | 1446
|
2, | 1588
|
..., | ...
|
kde user_id je identifikátor uživatele (integer), object_id je identifikátor objektu (integer)
Výstupem Vašeho programu pak bude soubor solution.csv, který má stejný formát jako train100.csv, ale obsahuje páry uživatel-objekt z test_set.csv doplněné o Vaše předpokládané hodnocení
- Jak se bude hodnotit?
Potom co váš program vytvoří soubor solution.csv je třeba jej uploadovat přes formulář na adrese http://www.ksi.mff.cuni.cz/~peska/challenge_evaluator_form.php
Úspěšnost Vašeho řešení se bude počítat na základě metriky RMSE, která zjednodušeně řečeno udává průměrnou odchylku mezi Vaším předpokládaným a skutečným hodnocením (čím menší, tím lepší).
V nejbližší době zveřejníme výsledky několika jednoduchých modelů UP (náhodné, user average, UP na základě baseline predictors). Vaším prvním cílem, je dosáhnout lepších výsledků, než tyto modely.
Dále bude na adrese http://www.ksi.mff.cuni.cz/~peska/challenge_hiscore.php zveřejněna tabulka nejlepších dosažených výsledků - první 3 z vás mají zaručen bonus ke zkoušce ve formě dodatečných bodů.
- Jak na to? probereme detailněji na druhém cvičení
Existuje řada algoritmů pro zjišťování uživatelských preferencé a doporučování.
- Globální algoritmy (které neberou v úvahu uživatele), např. průměrné hodnocení daného objektu.
- Baseline prediktory (hodnocení = global_average + item_average + user_average)
- Collaborative filtering založené na podobnosti uživatelů skrze podobné hodnocení(k-nearest neighbors)
- Různé varianty content-based algoritmů založených na podobnosti objektů skrze atributy (Vector space model, Attributes based similarity, ...)
- Model desetiboje
- Kombinace výše uvedených algoritmů
- Metody pro strojové učení (rozhodovací stromy, neuronové sítě,...)
V žádném případě nezakazuju použití již existujících řešení/algoritmů - např. Weka, RapidMiner, MyMediaLite aj. ale nechci řešit situaci, kdy 2 lidé odevzdají zcela stejné výsledky (možnost práce v týmu je, ale jen po konzultaci se mnou a za cenu mírného zvýšení náročnosti).
- Program a deadliny
11.11. První cvičení - seznámení s datasetem, způsobem práce, metrikami a základními algoritmy
do 24.11. DU-1 kostra vašeho řešení (dummy doporučovač a otestovaný přístup k evaluátoru: jde o to zkontrolovat, zda jste schopni vytvořit validní výstup, který evaluátor bez chyb zchroustá)
25.11. Druhé cvičení - především probereme různé doporučovací algoritmy a případné problémy s kostrou vašeho řešení
Konzultace dle domluvy v průběhu prosince
do 3.1. 2015 23:59 DU-2 možnost posílat své řešení do evaluátoru, zároveň do stejného data odeslání zdrojových kódů na adresu peska@ksi.mff.cuni.cz. Do předmětu napište "NDBI037 source codes"
6.1. 2015 Třetí cvičení - vyhodnocení výsledků (každý si připravte prezentaci na cca 5 minut o tom jaké řešení jste zvolili).
Kostra jednoduchého dummy doporučovače v PHP