Search
Test: https://goo.gl/forms/TZUG2VN64nJuhJ1s2
Instalace balíčku s funkcí svm()
install.packages("e1071") library(e1071)
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:
cost
# 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)
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.
kruh
# ú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))
kernel