Warning
This page is located in archive.

TEST 10

  1. (0.5 b) Co je (i) diskretizace a (ii) vzorkování dat? K čemu se tyto metody využívají?
  2. (0.5 b) Napiště 3 konkrétní příklady typů dat, která lze reprezentovat jako časovou řadu.
  3. (0.5 b) Napiště alespoň 3 způsoby předzpracování časových řad.
  4. (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 simple.txt a v souboru complex.txt. Data by měla vypadat následovně:

Postupně vyzkoušíme, jak se na daných datech chová:

  1. samotný Decision Stump,
  2. porota vytvořená z více klasifikátorů Decision Stump,
  3. porota vytvořená z více klasifikátorů Decision Stump metodou AdaBoost (viz také přednáška J.Šochmana a J.Matase nebo 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:

  1. 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.
  2. prozkoumejte vstupní data a zamyslete se, jak se na těchto datech bude chovat jeden klasifikátor typu Decision Stump
  3. natrénujte Decision Stump a spočtěte jeho relativní chybu - souhlasí s vaším odhadem?
  4. 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.
  5. 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?
  6. 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:

  1. Který ze tří zkoumaných klasifikátorů dosahuje na našich datech největší přesnosti?
  2. 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ů (Human Activity Recognition Using Smartphones Data Set). Předzpracovaná data naleznete v souborech v archivu 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)

Skript obsahující všechny úkoly: dvz2017_kombinace_klasifikatoru.zip

courses/a6m33dvz/cviceni/11-adabag.txt · Last modified: 2018/12/20 12:45 by nemymila