Skip to content

Commit ecf7d4f

Browse files
authored
SVM CLASSIFICATION
1 parent 6b94a81 commit ecf7d4f

File tree

1 file changed

+220
-0
lines changed

1 file changed

+220
-0
lines changed

SVM.R

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
#install.packages("ISLR")
2+
library(ISLR)
3+
#install.packages("tidyverse")
4+
library(tidyverse)
5+
#install.packages("funModeling")
6+
library(funModeling)
7+
#install.packages("caret")
8+
library(caret)
9+
#install.packages("pROC")
10+
library(pROC)
11+
#install.packages("class")
12+
library(class)#knn icin
13+
#install.packages("e1071")
14+
library(e1071)#knn icin
15+
#install.packages("kernlab")
16+
library(kernlab) #svm icin
17+
#install.packages("ROCR")
18+
library(ROCR) #roc icin
19+
#install.packages("neuralnet")
20+
library(neuralnet)
21+
#install.packages("GGally")
22+
library(GGally)
23+
#install.packages("nnet")
24+
library(nnet)
25+
#install.packages("rpart")
26+
library(rpart)
27+
#install.packages("cli")
28+
library(cli)
29+
#install.packages("tree")
30+
library(tree)
31+
#install.packages("rpart.plot")
32+
library(rpart.plot)
33+
#install.packages("randomForest")
34+
library(randomForest)
35+
#install.packages("gbm")
36+
library(gbm)
37+
#install.packages("xgboost")
38+
library(xgboost)
39+
#install.packages("DiagrammeR")
40+
library(DiagrammeR)
41+
#install.packages("mlbench")
42+
library(mlbench)
43+
44+
45+
set.seed(10111)
46+
x <- matrix(rnorm(40), 20, 2)
47+
y <- rep(c(-1,1), c(10,10))
48+
head(x)
49+
head(y)
50+
x[y==1,] <- x[y==1,] + 1
51+
head(x)
52+
plot(x, col=y+3,pch=19)
53+
54+
df <- data.frame(x, y=as.factor(y))
55+
56+
#svm model
57+
58+
svm_model1 <- svm(y~., data = df, kernel="polynomial", cost=10, scale = F)
59+
summary(svm_model1)
60+
61+
plot(svm_model1, df)
62+
63+
#SVM MODELİNİN NASIL OLUŞTUĞUNU ANLAMAK
64+
##===========================================================
65+
#BURADA DF'NİN MİNİMUM VE MAKSİMUM DEĞERLERİ ARASINDA DEĞERLER OLUŞTURUP
66+
# SVM YAPISNININ NASIL ORTAYA ÇIKTIĞINI ANLAMAYA ÇALIŞACAĞIZ.
67+
68+
a <- seq(from=apply(df,2, range)[1,1],
69+
to = apply(df, 2, range)[2,1],
70+
length = 5)
71+
b <- seq(from=apply(df,2, range)[1,2],
72+
to = apply(df, 2, range)[2,2],
73+
length = 5)
74+
expand.grid(a,b)
75+
76+
make_grid <- function(x, n = 75) {
77+
g_range = apply(x, 2, range)
78+
x1 = seq(from = g_range[1,1], to = g_range[2,1], length = n)
79+
x2 = seq(from = g_range[1,2], to = g_range[2,2], length = n)
80+
expand.grid(X1 = x1, X2 = x2)
81+
}
82+
83+
x_grid <- make_grid(x)
84+
x_grid[1:10,]
85+
86+
y_grid <- predict(svm_model1, x_grid)
87+
88+
plot(x_grid, col=c("red", "blue")[as.numeric(y_grid)],
89+
pch=19, cex=0.2)
90+
91+
points(x, col=y+3, pch=19)
92+
points(x[svm_model1$index, ], pch="I", cex=2)
93+
94+
beta <- drop(t(svm_model1$coefs)%*%x[svm_model1$index,])
95+
b0 <- svm_model1$rho
96+
97+
curve(b0 / beta[2], -beta[1] / beta[2])
98+
curve((b0 - 1) / beta[2], -beta[1] / beta[2], lty = 2)
99+
curve((b0 + 1) / beta[2], -beta[1] / beta[2], lty = 2)
100+
#===========================================================#
101+
102+
103+
#svm tahmin bölümü
104+
105+
pred <- predict(svm_model1)
106+
class_error(df$y, svm_model1$fitted)
107+
108+
df$y <- ifelse(df$y==-1, 0,1)
109+
svm_model1$fitted <- ifelse(svm_model1$fitted==-1, 0, 1)
110+
111+
tb <- table(svm_model1$fitted, df$y)
112+
confusionMatrix(tb, positive = "1")
113+
svm_model1$fitted
114+
115+
# SVM DOĞRUSAL OLMAYAN MODELLER
116+
117+
#İLK MODEL
118+
#======================================================
119+
#load ile yüklenen data R içinden ismiyle çağrılabilir.
120+
load(file = "ESL.mixture.rda")
121+
df <- ESL.mixture
122+
attach(df)
123+
remove(x, y)
124+
plot(x, col=y+1)
125+
df <- data.frame(x=x, y=as.factor(y))
126+
127+
n_svm_fit <- svm(factor(y)~., data = df, scale=F, kernel="radial", cost=5)
128+
svm_fit
129+
130+
x_grid <- expand.grid(X1 = px1, X2 = px2)
131+
y_grid <- predict(n_svm_fit, x_grid)
132+
133+
134+
plot(x_grid,
135+
col = as.numeric(y_grid),
136+
pch = 20,
137+
cex = .2)
138+
139+
points(x, col = y + 1, pch = 19)
140+
141+
dv <- predict(n_svm_fit, x_grid, decision.values = TRUE)
142+
143+
contour(px1, px2,
144+
matrix(attributes(dv)$decision, length(px1), length(px2)),
145+
level = 0,
146+
add = TRUE)
147+
148+
149+
contour(px1, px2,
150+
matrix(attributes(dv)$decision, length(px1), length(px2)),
151+
level = 0.5,
152+
add = TRUE,
153+
col = "blue",
154+
lwd = 2)
155+
156+
157+
# İKİNCİ MODEL VE MODEL TUNİNG
158+
#=========================================================
159+
data("segmentationData")
160+
df <- segmentationData
161+
as.tibble(df)
162+
glimpse(df)
163+
# biz bu veriseti içinde class değişkenini bağımlı değişken olarak alacağız.
164+
table(df$Class)
165+
166+
svm_train <- df %>% filter(Case=="Train") %>% select(-Case)
167+
svm_test <- df %>% filter(Case=="Test") %>% select(-Case)
168+
169+
svm_train_x <- svm_train %>% select(-Class)
170+
svm_test_x <- svm_test %>% select(-Class)
171+
172+
svm_test_y <- svm_test$Class
173+
svm_train_y <- svm_train$Class
174+
175+
#model tune işlemleri için ayarlamalar.
176+
177+
ctrl <- trainControl(method = "cv", summaryFunction = twoClassSummary,
178+
classProbs = TRUE)
179+
180+
svm_grid <- expand.grid(sigma=0.08,
181+
C = seq(0.001, 0.2, length=10))
182+
183+
svm_tune <- train(svm_train_x, svm_train_y, method="svmRadial",
184+
trControl = ctrl,
185+
tuneGrid=svm_grid, metric="ROC")
186+
svm_tune
187+
plot(svm_tune)
188+
confusionMatrix(predict(svm_tune, test_x), svm_test_y, positive = "WS")
189+
190+
y_pred <- predict(svm_tune, svm_test_x, type="raw")
191+
192+
test_prob <- predict(svm_tune, svm_test_x, type = "prob")
193+
test_prob$WS
194+
roc(svm_test_y ~ test_prob$WS, plot = TRUE, print.auc = TRUE)
195+
196+
197+
198+
199+
200+
201+
202+
203+
204+
205+
206+
207+
208+
209+
210+
211+
212+
213+
214+
215+
216+
217+
218+
219+
220+

0 commit comments

Comments
 (0)