Search
TEST 10
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á:
A pro každý klasifikátor nebo porotu klasifikátorů spočteme jeho relativní chybu na testovací množině.
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)
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:
Otázky:
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