{{indexmenu_n>9}}
Obsah této stránky bude přístupný od 30. 11. 2017.
====== Cvičení 9 - SVM klasifikátor ======
Test: https://goo.gl/forms/TZUG2VN64nJuhJ1s2
===== Opakování =====
* support vectors
* kernel
* princip metody SVM
===== Klasifikátor SVM a data =====
**Instalace balíčku s funkcí svm()**
install.packages("e1071")
library(e1071)
===== Demonstrace fungování klasifikátoru SVM I.=====
Nejprve si vyzkoušejte na podmnožině iris dat fungování SVM klasifikátoru - příklad převzat z knihy: Yu-Wei, Chiu: Machine Learning with R Cookbook, Packt, 2015 - [[https://www.r-bloggers.com/review-machine-learning-with-r-cookbook/|Book review]]
Načtení iris dat a jejich úprava
# načtení iris dat
data(iris)
# podmnožina dat a její vykreslení
iris.subset = subset(iris, select=c("Sepal.Length", "Sepal.Width", "Species"), Species %in% c("setosa","virginica"))
plot(x=iris.subset$Sepal.Length,y=iris.subset$Sepal.Width,col=iris.subset$Species, pch=19)
svm.model = svm(Species ~ ., data=iris.subset, kernel='linear',cost=1, scale=FALSE)
plot(x=iris.subset$Sepal.Length,y=iris.subset$Sepal.Width, col=iris.subset$Species, pch=19)
points(iris.subset[svm.model$index,c(1,2)],col="blue",cex=2)
w = t(svm.model$coefs) %*% svm.model$SV
b = -svm.model$rho
abline(a=-b/w[1,2], b=-w[1,1]/w[1,2], col="red", lty=5)
**Úkoly:**
* Zopakujte učení a vykreslení prozkoumejte vliv parametru ''cost''.
* Jaký vliv bude mít parametr ''cost'' na míru přeučení algoritmu?
* Jakým postupem byste volili velikost parametru ''cost'' během učení klasifikátoru?
* Vyzkoušejte SVM klasifikátor na datech z minulého cvičení - rozpoznávání číslic.
# tune
tuned = tune.svm(Species ~ ., data=iris.subset, cost = 10^(1:4), gamma = 10^(-6:-1))
summary(tuned)
svm.model.tuned = svm(Species ~ ., data=iris.subset, kernel='linear', cost=?, scale=FALSE)
plot(x=iris.subset$Sepal.Length,y=iris.subset$Sepal.Width, col=iris.subset$Species, pch=19)
points(iris.subset[svm.model.tuned$index,c(1,2)],col="blue",cex=2)
w = t(svm.model.tuned$coefs) %*% svm.model.tuned$SV
b = -svm.model.tuned$rho
abline(a=-b/w[1,2], b=-w[1,1]/w[1,2], col="red", lty=5)
===== Demonstrace fungování klasifikátoru SVM II. =====
Ve druhém příkladu si ukážeme fungování klasifikátoru na datech s kruhem a jeho okolím.
Začneme přípravou dat s kruhem. Naimportujte data {{courses:a6m33dvz:cviceni:empty.csv.txt|empty.csv}} jako v tomto případě ''kruh''. Data obsahují náhodně vygenerované body ve čtverci o velikosti strany 1.
# úprava dat na kruh a jeho okolí
kruh$class <- 0 #pro jistotu
kruh$class[(kruh$a-0.3)^2+(kruh$b-0.5)^2<0.04] <- 1
kruh$class <- as.factor(kruh$class)
plot(kruh$a, kruh$b, col=kruh$class)
Naučte SVM klasifikátor
m <- svm(class ~ ., data=kruh, kernel='radial',cost=2)
# kontingenční tabulka
table(m$fitted, kruh$class, dnn = c("m", "kruh"))
# vykreslení chybně klasifikovaných bodů
kruh.pred <- kruh[m$fitted != kruh$class,]
par(mfrow = c(1,2))
plot(kruh$a, kruh$b, col=kruh$class)
plot(kruh.pred$a, kruh.pred$b, pch=19, xlim=c(0,1), ylim=c(0,1))
**Úkoly:**
* Zkuste u klasifikátoru měnit parametr ''cost''= 1,1.3,2,5 a parametr ''kernel''="linear".
* Vytvořte vlastní data a naučte klasifikátor SVM.