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