base <- read_excel("Cáncer.xlsx")
#View(base)Support Vector Machines (SVM) en R
APLICACIÓN SVM
Etapa 1
Leer la base de datos asociada
Etapa 2
Filtrado de datos
y_Diag<- factor(base$Diagnóstico, levels=c("B","M"), labels = c(0,1))
base1<-data.frame(Diagnóstico=y_Diag,Suavidad=base$suavidad3,P_Cóncavos=base$puntos_cóncavos3)
#base1
Etapa 3
Segmentación gráfica
# Prepara los datos
x <- cbind(base1$Suavidad, base1$P_Cóncavos)
y <- base1$Diagnóstico
Benigno <- sum(y==0)
Maligno <- sum(y==1)
# Categoría (rojo = maligno, verde = benigno)
colores <- c(rep('green',Benigno),rep('red',Maligno))
pchn <- 21
# Diagrama de dispersión
plot(x, pch = pchn, bg = colores, xlab='Suavidad', ylab='Puntos Cóncavos')
Etapa 4
Aplicación de SVM (Lineal)
C <- 10
svm.lineal <- svm(y~., data=base1, kernel='linear', cost=C, cross=2, scale=FALSE)
summary(svm.lineal)
Call:
svm(formula = y ~ ., data = base1, kernel = "linear", cost = C, cross = 2,
scale = FALSE)
Parameters:
SVM-Type: C-classification
SVM-Kernel: linear
cost: 10
Number of Support Vectors: 7
( 4 3 )
Number of Classes: 2
Levels:
0 1
2-fold cross-validation on training data:
Total Accuracy: 100
Single Accuracies:
100 100
C <- 10^3
svm.lineal <- svm(y~., data=base1, kernel='linear', cost=C, cross=2, scale=FALSE)
summary(svm.lineal)
Call:
svm(formula = y ~ ., data = base1, kernel = "linear", cost = C, cross = 2,
scale = FALSE)
Parameters:
SVM-Type: C-classification
SVM-Kernel: linear
cost: 1000
Number of Support Vectors: 7
( 4 3 )
Number of Classes: 2
Levels:
0 1
2-fold cross-validation on training data:
Total Accuracy: 100
Single Accuracies:
100 100
Etapa 5
Indexación de los vectores soporte
svm.lineal$index[1] 39 204 380 568 69 193 248
Etapa 6
Obtener los coeficientes
- Las observaciones se multiplican por los coeficientes para obtener el vector perpendicular al hiperplano que resuelve el problema
svm.lineal$coefs [,1]
[1,] 0.367711966
[2,] 0.098151548
[3,] 0.004681961
[4,] 0.529456508
[5,] -0.867651356
[6,] -0.004175613
[7,] -0.128175015
Etapa 6
Obtener w_0 (término independiente)
svm.lineal$rho[1] -2.17011e-05
Etapa 7
Resultados gráficos
x.svm <- x[svm.lineal$index,]
w <- crossprod(x.svm, svm.lineal$coefs)
w0 <- svm.lineal$rho
plot(x, pch = pchn, bg = colores, xlab='Suavidad', ylab='Puntos Cóncavos')
abline(w0/w[2], -w[1]/w[2], lwd=2, col='blue')
Etapa 8