TEST 04
V dnešním cvičení využijeme několik souborů s daty - všechny jsou v následujícím souboru cviceni_stromy.zip
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
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:
C5.0
.
weather_test <- data.frame(outlook='sunny',temperature='cool',humidity='normal',windy='TRUE')
rpart.control
parametr maxdepth=2
, nakreslete, jak se konstruuje rozhodovací strom pro tato 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"))
maxdepth=[1,…,5]
. Je rozhodovací strom vhodný klasifikátor pro tento typ dat? Proč?
Demonstrace vlastností ID3 na algorithmu C5.0 (vylepšený ID3 algoritmus) C4.5 algorithm
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'))
sample.kruh <- sample(2, nrow(kruh1), replace=TRUE, prob=c(0.7, 0.3)) kruh1.sample <- kruh1[sample.kruh==2,]