{{indexmenu_n>11}}
Obsah této stránky bude přístupný od 14. 12. 2017.
Test: https://goo.gl/forms/7LosiIUZhpvn9Ze93
**TEST 10**
- (0.5 b) Co je (i) diskretizace a (ii) vzorkování dat? K čemu se tyto metody využívají?
- (0.5 b) Napiště 3 konkrétní příklady typů dat, která lze reprezentovat jako časovou řadu.
- (0.5 b) Napiště alespoň 3 způsoby předzpracování časových řad.
- (0.5 b) Co je a k čemu slouží Dynamic Time Warping (DTW, dynamické borcení času)?
====== Cvičení 11 - Kombinování klasifikátorů ======
Dnes si vyzkoušíme, jak z velmi jednoduchých klasifikátorů //Decision Stump (Rozhodovací pařez)// (což jsou degenerované rozhodovací stromy obsahující pouze kořen stromu a dva listy) vytvořit klasifikátory silnější.
Data jsou ve souboru {{courses:a6m33dvz:cviceni:simple.txt|}} a v souboru {{courses:a6m33dvz:cviceni:complex.txt|}}. Data by měla vypadat následovně:
{{courses:a6m33dvz:cviceni:simple.png?nolink&500|}}
Postupně vyzkoušíme, jak se na daných datech chová:
- samotný //Decision Stump//,
- porota vytvořená z více klasifikátorů //Decision Stump//,
- porota vytvořená z více klasifikátorů //Decision Stump// metodou AdaBoost (viz také [[http://cmp.felk.cvut.cz/cmp/courses/recognition/Labs/adaboost/adaboost_talk.pdf|přednáška J.Šochmana a J.Matase]] nebo [[https://web.stanford.edu/~hastie/Papers/samme.pdf|Zhu et al: Muticlass AdaBoost]]).
A pro každý klasifikátor nebo porotu klasifikátorů spočteme jeho relativní chybu na testovací množině.
=== Decision Stump ===
Jednoduchý //Decision Stump// můžeme jednodušše vytvořit pomocí funkce **rpart** ze stejnojmenného balíčku v R následujícími příkazy:
# Jednoduchý decision stump klasifikátor
library(rpart)
library(rpart.plot)
stump <- rpart(class ~ .,data = train,control = rpart.control(maxdepth=1,cp=-1))
prp(stump, type=2, extra=101, nn=TRUE, fallen.leaves=TRUE,
faclen=0, varlen=0, shadow.col="grey", branch.lty=3)
stumpError <- sum(predict(stump,newdata=test,type='class') != test$class)/nrow(test)
stumpConfusion <- table(predict(stump,newdata=test,type='class'),test$class)
=== Kombinování klasifikátorů ===
Pro kombinování klasifikátorů použijeme funkce z balíčku //adabag//.
library(adabag)
library(rpart)
# Porota složená z klasifikátorů - bagging
baggedStumps <- bagging(class ~ .,data=train,mfinal=20,control=rpart.control(maxdepth=1,cp=-1))
baggedStumps.perf <- predict.bagging(baggedStumps,newdata=test)
# Porota složená z klasifikátorů - AdaBoost
boostedStumps <- boosting(class ~ .,data=train,mfinal=20,boos=T,control=rpart.control(maxdepth=1,cp=-1))
boostedStumps.perf <- predict.boosting(boostedStumps,newdata=test)
**Úkoly:**
- nahrajte si data ze souboru simple.txt, pozor na typ u atributu class, musí být typu **factor**, protože dále budeme rpart používat pro predikci tříd a nikoli jako regresní stromy.
- prozkoumejte vstupní data a zamyslete se, jak se na těchto datech bude chovat jeden klasifikátor typu //Decision Stump//
- natrénujte //Decision Stump// a spočtěte jeho relativní chybu - souhlasí s vaším odhadem?
- natrénujte porotu klasifikátorů poskládanou z //Decision Stump// a spočtěte její relativní chybu. Jakou chybu očekáváte ve srovnání se samotným operátorem //Decision Stump//? Zkuste chování pro různé velikosti porot. Prohlédněte si i natrénované stromy.
- natrénujte porotu operátorů //Decision Stump// metodou AdaBoost pro různé počty iterací (1,3,5,10). Jak se mění relativní chyba klasifikace?
- spočtěte rovněž přesnosti klasifikace zvlášť na trénovací a zvlášť na testovací množině a přesnost naučeného klasifikátoru spočtěte zvlášť na obou množinách aplikací naučeného klasifikátoru na trénovací resp. testovací množinu a spočtením přesnosti klasifikace.
**Otázky:**
- Který ze tří zkoumaných klasifikátorů dosahuje na našich datech největší přesnosti?
- Který z klasifikátorů dobře generalizuje a který se naopak přeučuje?
==== Bagged trees, random forest a AdaBoost ====
Zajímavou variací na porotu klasifikátorů je náhodný les. Postup konstrukce klasifikátoru je podobný jako u //Baggingu//. Narozdíl od //Baggingu// ale vzorkujeme i prediktory, které použijeme pro jednotlivé stromy v porotě. Konstrukci náhodného lesa si můžete vyzkoušet při předpovídání aktivity člověka (ležení, sezení, stání,...) na datech z akcelerometrů chytrých telefonů ([[http://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+Smartphones|Human Activity Recognition Using Smartphones Data Set]]). Předzpracovaná data naleznete v souborech v archivu {{:courses:a6m33dvz:cviceni:human_activity_recognition.zip|}}. Náhodný les je implementovaný v package //randomForest// a použití je následující:
forest <- randomForest(activity ~ .,data = train,ntree=20)
forest.pred$error <- sum(predict(forest,newdata = test,type='response') != test$activity)/nrow(test)
forest.pred$confusion <- table(predict(forest,newdata = test,type='response'),test$activity)
/* Pro porovnání můžete na datech natrénovat rozhodovací les pomocí baggingu a rozhodovací les pomocí AdaBoostu a porovnat jejich výsledky. */
Skript obsahující všechny úkoly: {{:courses:a6m33dvz:cviceni:dvz2017_kombinace_klasifikatoru.zip|}}