{{indexmenu_n>5}}
Obsah této stránky bude přístupný od 9. 11. 2017.
Test: https://goo.gl/forms/ZAVeyFwDV2hnWXhJ2
**TEST 04**
- (0.5b) //Asociační pravidla//. Definujte podporu (support) množiny položek.
- (0.5b) Uvažujte dva body $x=(1;2)$ a $y=(4;6)$. Spočítejte jejich Eukleidovskou i Manhattanskou vzdálenost.
====== Cvičení 5 - Rozhodovací stromy ======
V dnešním cvičení využijeme několik souborů s daty - všechny jsou v následujícím souboru {{courses:a6m33dvz:cviceni:cviceni3_stromy.zip|cviceni_stromy.zip}}
==== Konstrukce rozhodovacího stromu ====
* Jak funguje algoritmus ID3?
* Jaké znáte metody pro nalezení nejinformovanějšího atributu?
* Jak se spočítá entropie pro jeden atribut?
**Příklad:** Hráči chodí hrát tenis, ale hrají pouze za příznivého počasí. Příklady jejich rozhodnutí jsou v následující tabulce. Atributy jsou ''"outlook"'', ''"temperature"'', ''"humidity"'', ''"windy"'' a rozhodnutí je ve sloupečku ''"play"''. Nalezněte podle čeho se hráči rozhodují, zda půjdou hrát.
^ outlook ^ temperature ^ humidity ^ windy ^ play ^
| sunny | hot | high | false | no |
| sunny | hot | high | true | no |
| overcast| hot | high | false | yes |
| rainy | mild | high | false | yes |
| rainy | cool | normal | false | yes |
| rainy | cool | normal | true | no |
| overcast| cool | normal | true | yes |
| sunny | mild | high | false | no |
| sunny | cool | normal | false | yes |
| rainy | mild | normal | false | yes |
| sunny | mild | normal | true | yes |
| overcast| mild | high | true | yes |
| overcast| hot | normal | false | yes |
| rainy | mild | high | true | no |
**Úkol:**
Nalezněte nejinformovanější atribut podle kritéria entropie
{{courses:a6m33dvz:cviceni:cviceni2resenikriterium.pdf|Řešení příkladu}}
==== Rozhodovací stromy v R ====
library(C50)
library(rpart)
library(rpart.plot)
data(iris)
ind <- sample(nrow(iris),0.7*nrow(iris))
iris_train <- iris[ind,]
iris_test <- iris[-ind,]
tree_rpart <- rpart(Species ~ .,data=iris_train,control=rpart.control(minsplit=10,cp=0),parms=list(split='information'))
summary(tree_rpart)
prp(tree_rpart, type=2, extra=101, nn=TRUE, fallen.leaves=TRUE,
faclen=0, varlen=0, shadow.col="grey", branch.lty=3)
# ověření na testovacích datech
table(predict(tree_rpart,newdata=iris_test,type="class"),iris_test$Species)
#konstrukce stromu pomocí algoritmu C5.0
tree_c50 <- C5.0(Species ~ ., data=iris_train)
summary(tree_c50)
table(predict(tree_c50,newdata=iris_test,type="class"), iris_test$Species)
**Úkol:**
* Data o tenistech jsou součástí souboru dat pod názvem //weather.csv//.
* Vytvořte rozhodovací strom v R pomocí ''C5.0''.
* Který atribut je kořenem stromu?
* Půjdou tenisté hrát v následujících podmínkách [outlook=sunny, temperature=cool, huminity=normal, windy=true]? Použijte příkaz //predict//.
weather_test <- data.frame(outlook='sunny',temperature='cool',humidity='normal',windy='TRUE')
==== Demonstrace fungování rozhodovacího stromu ====
* Naimportujte do R data //mensivetsi.csv// ze souboru dat.
* Jak vypadají data? Existuje nějaký jednoduchý popis dat?
* Nastavte v ''rpart.control'' parametr ''maxdepth=2'', nakreslete, jak se konstruuje rozhodovací strom pro tato data.
* Ilustraci toho, jakým způsobem strom klasifikuje, můžete shlédnout, aplikujete-li natrénovaný strom na data
#class musí být typu factor
mv$class<-factor(mv$class)
#konstrukce modelu
model <- rpart(class ~ a + b, data = mv, control = rpart.control(maxdepth=2))
#vizualizace stromu
prp(model, type=2, extra=101, nn=TRUE, fallen.leaves=TRUE,
faclen=0, varlen=0, shadow.col="grey", branch.lty=3)
#vizualizace predikce stromem
plot(mv$a, mv$b, col=predict(model,type="class"))
* Postupně zvětšujte parametr ''maxdepth=[1,...,5]''. Je rozhodovací strom vhodný klasifikátor pro tento typ dat? Proč?
==== Další vlastnost rozhodovacího stromu - demontrace XOR ====
Demonstrace vlastností ID3 na algorithmu C5.0 (vylepšený ID3 algoritmus) [[http://en.wikipedia.org/wiki/C4.5_algorithm|C4.5 algorithm]]
* Do R postupně naimportujte soubory dat //kruh1.csv// až //kruh4.csv//
kruh1 <- read.csv('kruh1.csv',header=T,sep=';')
kruh2 <- read.csv('kruh2.csv',header=T,sep=';')
kruh3 <- read.csv('kruh3.csv',header=T,sep=';')
kruh4 <- read.csv('kruh4.csv',header=T,sep=';')
kruhy <- rbind(kruh1,kruh2,kruh3,kruh4)
plot(kruhy$a,kruhy$b,col=kruhy$class)
kruhy$class <- factor(kruhy$class)
#packages
library(C50)
model2 <- C5.0(x = kruhy[,1:2], y=kruhy$class)
summary(model2)
plot(kruhy$a,kruhy$b,col=predict(model2,type='class'))
table(predict(model2,newdata=kruhy,type='class'))
plot(kruhy$a,kruhy$b,col=predict(model2,newdata=kruhy,type='class'))
* Zkonstruujte rozhodovací strom. Lze ho z těchto dat zkonstruovat a proč?
* Změňte velikost vzorku //kruh1// a //kruh4// na 30%. Co se stane?
sample.kruh <- sample(2, nrow(kruh1), replace=TRUE, prob=c(0.7, 0.3))
kruh1.sample <- kruh1[sample.kruh==2,]
* Zkonstruujte rozhodovací strom. Lze ho nyní z těchto dat zkonstruovat a proč?