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,]