• Nie Znaleziono Wyników

Nieliniowe maszyny wektorów wspierających

N/A
N/A
Protected

Academic year: 2021

Share "Nieliniowe maszyny wektorów wspierających"

Copied!
8
0
0

Pełen tekst

(1)

Nieliniowe maszyny wektorów wspierających

Marcin Orchel

1 Wstęp 2 Zadania

2.1 Zadania na 3.0

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normalnych zaznacz na wykresie dane treningowe, klasyfikator svm, dla różnych wartości C oraz sigma, dla funkcji jądrowej wielomianowej i RBF.

• dodać do wykresu wcześniej testowane klasyfikatory

• oblicz błąd klasyfikacji na zbiorze testowym dla wszystkich użytych klasyfikatorów

• przetestować SVM z różnymi wartościami parametru cost (C) i sigma

• wykorzystać walidację krzyżową do testowania jakości, parametr cross

• przetestować wyszukiwanie optymalnych wartości parametrów C i sigma

• zbadać wpływ wartości C na błąd testowy

• przetestować uogólnienie klasyfikatora na wiele klas za pomocą konstrukcji kilku maszyn wektorów wspierających

• przetestować maszyny wektorów wspierających dla problemu regresji

• zbadać liczbę wektorów wspierających, zaobserwować liczbę wektorów wspierają- cych, dla różnych sigma kiedy mamy przeestymowanie lub niedoestymowanie

• zastosować różną wartość parametru C dla każdej klasy Wskazówki

• przetestować C-classification z jądrem RBF i wielomianowym Wskazówki do R

• parametr kernel powinien być ustawiony na polynomial lub radial basis

(2)

• pakiet e1071

• https://www.rdocumentation.org/packages/e1071/topics/svm

• https://www.rdocumentation.org/packages/e1071/topics/tune.wrapper,https:

//www.rdocumentation.org/packages/e1071/topics/tune,https://www.rdocumentation.

org/packages/e1071/topics/tune.control

• https://www.rdocumentation.org/packages/e1071/topics/predict.svm

• https://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Classification/

SVM

• https://stackoverflow.com/questions/21827776/plot-margins-for-support-

vector-machine,https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/

asset/ch9.html Wskazówki do Matlaba

• svmtrain http://www.mathworks.com/help/stats/svmtrain.html

• svmclassify http://www.mathworks.com/help/stats/svmclassify.html

• fitcsvm http://www.mathworks.com/help/stats/fitcsvm.html

• fitcecochttp://www.mathworks.com/help/stats/fitcecoc.html

• http://www.mathworks.com/help/stats/classificationsvm-class.html

• http://www.mathworks.com/help/stats/compactclassificationsvm-class.html

• omówienie metody http://www.mathworks.com/help/stats/support-vector- machines-svm.html

• wszystkie funkcje związane z svmhttp://www.mathworks.com/help/stats/support- vector-machine-classification.html

• http://www.mathworks.com/help/stats/classificationecoc-class.html

• http://www.mathworks.com/help/matlab/ref/importdata.html

• http://www.mathworks.com/help/stats/perfcurve.html Przykłady

• svm.iris<-svm(klasa ~ ., data=iris, kernel="radial basis", cost=10, cross=1)

print(summary(svm.iris))

y.theoretical <- fitted(svm.iris)

print(table(iris$klasa, y.theoretical)) print(svm.iris$index)

(3)

• wyświetlanie granicy i marginesu require("MASS")

require("e1071") n <- 2

A <- matrix(runif(n^2)*2-1, ncol=n) sigma <- t(A) %*% A

B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B

points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points1b<-cbind(rep(1, 1000), points1) points2b<-cbind(rep(-1, 1000), points2) allPoints<-rbind(points1b, points2b)

allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1

allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2

l <- allPointsDataFrame$V3

svm.model<-svm(as.factor(c)~w+l, data=allPointsDataFrame, kernel="radial", gamma=1.5, cost=10000, cross=0, scale=FALSE)

print(summary(svm.model))

y.theoretical <- fitted(svm.model)

#print(table(c, y.theoretical)) min.w <- min(w)

max.w <- max(w) min.l <- min(l) max.l <- max(l)

#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o", dataSymbol="o")

zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =

c(-5,5), ylim=c(-5,5))

plot(allPoints[,2], allPoints[,3], col = allPoints[,1]+2, xlim = c(min.w,max.w), ylim=c(min.l,max.l))

x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)

myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)

y.pred <- predict(svm.model, myallPointsDataFrameT) z <- y.pred

contour(x, y, matrix(z, n), add=TRUE, levels=0, labcex = 0, drawlabels = FALSE)

(4)

v <- t(svm.model$coefs) %*% svm.model$SV b <- -svm.model$rho

#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)

#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#plot(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))

• regresja

require("MASS") require("e1071") n <- 2

A <- matrix(runif(n^2)*2-1, ncol=n) sigma <- t(A) %*% A

B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B

points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points1b<-cbind(rep(1, 1000), points1) points2b<-cbind(rep(-1, 1000), points2) allPoints<-rbind(points1b, points2b)

allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1

allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2

l <- allPointsDataFrame$V3

svm.model<-svm(w~l, data=allPointsDataFrame,

type="eps-regression", kernel="radial", gamma=1.5, cost=10000,

cross=0, epsilon=0.1, scale=FALSE) print(summary(svm.model))

y.theoretical <- fitted(svm.model)

#print(table(c, y.theoretical)) min.w <- min(w)

max.w <- max(w) min.l <- min(l) max.l <- max(l)

#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o", dataSymbol="o")

zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =

c(-5,5), ylim=c(-5,5))

plot(allPoints[,2], allPoints[,3], col = 1, xlim = c(min.w,max.w),

(5)

ylim=c(min.l,max.l))

x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)

myallPointsDataFrameT<-expand.grid(w=x) n <- length(x)

y.pred <- predict(svm.model, x) z <- y.pred

#contour(x, y, matrix(z, n), add=TRUE, levels=0, labcex = 0, drawlabels = FALSE)

#v <- t(svm.model$coefs) %*% svm.model$SV

#b <- -svm.model$rho

#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)

#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3) points(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))

• tune.svm

obj <- tune.svm(as.factor(c)~w+l, data=allPointsDataFrame, cost = 2^(2:8), gamma=2^(-2:4), kernel = "radial")

• tune.svm z walidacją krzyżową tc <- tune.control(cross = 5)

obj <- tune.svm(as.factor(c)~w+l, data=allPointsDataFrame, cost = 2^(2:8), gamma=2^(-2:4), kernel = "radial", tunecontrol = tc)

• 3 klasy

require("MASS") require("e1071") n <- 2

A <- matrix(runif(n^2)*2-1, ncol=n) sigma <- t(A) %*% A

B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B

C <- matrix(runif(n^2)*2-1, ncol=n) sigma3 <- t(C) %*% C

points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points3<-mvrnorm(n = 1000, c(0, 1), sigma3) points1b<-cbind(rep(1, 1000), points1) points2b<-cbind(rep(-1, 1000), points2) points2c<-cbind(rep(2, 1000), points3)

(6)

allPoints<-rbind(points1b, points2b, points2c) allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1

allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2

l <- allPointsDataFrame$V3

svm.model<-svm(as.factor(c)~w+l, data=allPointsDataFrame, kernel="radial", gamma="0.01", cost=1, cross=0, scale=FALSE)

print(summary(svm.model))

y.theoretical <- fitted(svm.model)

#print(table(c, y.theoretical)) min.w <- min(w)

max.w <- max(w) min.l <- min(l) max.l <- max(l)

#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o", dataSymbol="o")

zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =

c(-5,5), ylim=c(-5,5))

plot(allPoints[,2], allPoints[,3], col = allPoints[,1]+2, xlim = c(min.w,max.w), ylim=c(min.l,max.l))

x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)

myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)

y.pred <- predict(svm.model, myallPointsDataFrameT) z <- y.pred

contour(x, y, matrix(z, n), add=TRUE, levels=c(0, 1.5), labcex = 0, drawlabels = FALSE)

v <- t(svm.model$coefs) %*% svm.model$SV b <- -svm.model$rho

#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)

#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#plot(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))

• jedno klasowe svm require("MASS") require("e1071") n <- 2

A <- matrix(runif(n^2)*2-1, ncol=n)

(7)

sigma <- t(A) %*% A

B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B

C <- matrix(runif(n^2)*2-1, ncol=n) sigma3 <- t(C) %*% C

points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points3<-mvrnorm(n = 1000, c(0, 1), sigma3) points1b<-cbind(rep(1, 1000), points1) points2b<-cbind(rep(1, 1000), points2) points2c<-cbind(rep(1, 1000), points3)

allPoints<-rbind(points1b, points2b, points2c) allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1

allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2

l <- allPointsDataFrame$V3

svm.model<-svm(as.factor(c)~w+l, data=allPointsDataFrame, kernel="radial", gamma="0.5", cost=100,

cross=0, scale=FALSE, type="one-classification", nu=0.1)

print(summary(svm.model))

y.theoretical <- fitted(svm.model)

#print(table(c, y.theoretical)) min.w <- min(w)

max.w <- max(w) min.l <- min(l) max.l <- max(l)

#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o", dataSymbol="o")

zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =

c(-5,5), ylim=c(-5,5))

plot(allPoints[,2], allPoints[,3], col = allPoints[,1]+2, xlim = c(min.w,max.w), ylim=c(min.l,max.l))

x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)

myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)

y.pred <- predict(svm.model, myallPointsDataFrameT) z <- y.pred

contour(x, y, matrix(z, n), add=TRUE, levels=c(1), labcex = 0,

(8)

drawlabels = FALSE)

v <- t(svm.model$coefs) %*% svm.model$SV b <- -svm.model$rho

#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)

#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)

#plot(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))

2.2 Zadania na 4.0

• powtórzyć zadanie na 3.0 dla danych syntetycznych trójwymiarowych

• wykonać klasyfikacje svm z zadania na 3.0 z walidacją krzyżową 2.3 Zadania na 5.0

• dla wybranych danych wielowymiarowych za pomocą metody svm, porównać ja- kość klasyfikacji na danych testowych z klasyfikatorem Bayesa (z macierzą kowa- riancji i wartościami średnimi obliczonymi z danych)

Cytaty

Powiązane dokumenty

317 Nie oczekuję, że ktokolwiek będzie widział w tym momencie, że takie przedstawienie jest jedno- znaczne. Celem tej części wykładu nie jest jednak systematyczne wyłożenie

Zależy ono od zmian wartości dopuszczalnego ryzyka portfela – w przypadku kla- sycznej alokacji oraz odpornej alokacji rośnie ona wraz ze wzrostem dopuszczalne- go ryzyka portfela

• dla wygenerowanych danych trójwymiarowych dwóch klas z rozkładów normalnych zaznacz na wykresie trójwymiarowym dane treningowe i klasyfikator oparty na estymacji jądrowej.

Motywacją dla członu regularyzacyjnego jest zredukowanie zagrożenia przed- opasowania danych, okazuje się, że funkcje z H są bardziej dopasowane do danych gdy mają dużą normę.

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normal- nych zaznacz na wykresie dane treningowe, klasyfikator sieciami neuronowymi, dla różnej liczby neuronów

• dla wygenerowanych danych jednowymiarowych dwóch klas z rozkładów normal- nych zaznacz na wykresie dwuwymiarowym funkcję regresji logistycznej wraz z danymi treningowymi

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normal- nych wykonać klasyfikację qda (macierz kowariancji i wartości średnie obliczone na podstawie danych).

• dokonać klasyfikacji trzema wybranymi metodami w tym drzewami decyzyjnymi losowych zbiorów wygenerowanych z dwóch normalnych rozkładów prawdopodo- bieństwa dla