Warning
This page is located in archive.

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

  • 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

Ř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) C4.5 algorithm

  • Do R postupně naimportujte soubory dat kruh1.csvkruh4.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č?

courses/a6m33dvz/cviceni/05-stromy.txt · Last modified: 2018/11/01 08:44 by nemymila