Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Cvičení 9 - SVM klasifikátor

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 - 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 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.

courses/a6m33dvz/cviceni/09-svm.txt · Last modified: 2017/11/30 12:27 by anyzjiri