{{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|}}