TEST 04

  1. (0.5b) Asociační pravidla. Definujte podporu (support) množiny položek.
  2. (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 cviceni_stromy.zip

Konstrukce rozhodovacího stromu

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

Ř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:

    weather_test <- data.frame(outlook='sunny',temperature='cool',humidity='normal',windy='TRUE')
    

Demonstrace fungování rozhodovacího stromu

#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"))

Další vlastnost rozhodovacího stromu - demontrace XOR

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