Trabajo de Aplicacion (Curso de Mineria de Datos)
Juan Carlos Huanca Mollinedo
6/12/2019
Modelo de Clasificacion con Maquina de Soporte Vectorial (SVM) en R
Los datos proceden de un estudio sobre diagnóstico del cáncer de mama por imagen.
Mediante una punción con aguja fina se extrae una muestra del tejido sospechoso de la
paciente. La muestra se tiñe para resaltar los núcleos de las células y se determinan los
límites exactos de los núcleos. Las variables consideradas corresponden a distintos
aspectos de la forma del núcleo. El fichero contiene un [Link], llamado cancerMama,
con 2 variables explicativas medidas en pacientes cuyos tumores fueron diagnosticados
posteriormente como benignos o malignos y el factor y que toma los valores 0 o 1 en
función de si la correspondiente fila corresponde a un tumor benigno o maligno
respectivamente, Hay 569 observaciones, de las que 357 corresponden a tumores benignos
y 212 a tumores malignos.
Cargamos la libreria
library(e1071)
Cargamos los datos
load("[Link]") #leemos los datos en formato R
head(cancerMama) #visualizamos los datos
## [Link] [Link] y
## 1 0.09779 0.047810 0
## 2 0.10750 0.031100 0
## 3 0.10240 0.020760 0
## 4 0.08983 0.029230 0
## 5 0.08600 0.005917 0
## 6 0.10310 0.027490 0
Representamos gráficamente las dos variables predictivas:
# Prepara los datos
x <- cbind(cancerMama$[Link],cancerMama$[Link])
y <- cancerMama$y
n0 <- sum(y==0) #para contar cuantas son benigno
n1 <- sum(y==1) #para contar cuantas son malignos
# Para que los graficos queden mas bonitos (rojo = maligno, verde = benigno)
colores <- c(rep('green',n0),rep('red',n1))
pchn <- 21
# Diagrama de dispersion
plot(x, pch = pchn, bg = colores, xlab='suavidad', ylab='puntos Concavos')
Trabajamos con el Modelo SVM lineal
C <- 10^3 #Costo
modelo<- svm(y~., data=cancerMama, kernel='linear', cost=C, cross=2,
scale=FALSE)
summary(modelo) #resumen del modelo
##
## Call:
## svm(formula = y ~ ., data = cancerMama, kernel = "linear", cost = C,
## cross = 2, scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 1000
##
## Number of Support Vectors: 128
##
## ( 64 64 )
##
##
## Number of Classes: 2
##
## Levels:
## 0 1
##
## 2-fold cross-validation on training data:
##
## Total Accuracy: 91.3884
## Single Accuracies:
## 92.25352 90.52632
La Precisión del modelo es de un 91%
Indices de los vectores soporte
modelo$index #Indices
## [1] 1 23 26 28 29 44 45 51 52 54 56 65 66 70 97 100 106
109
## [19] 111 117 124 135 140 142 144 146 147 170 184 195 196 203 208 209 212
214
## [37] 223 224 225 233 239 245 247 263 268 279 281 293 295 296 300 303 304
306
## [55] 309 312 315 317 326 328 336 353 354 355 365 368 369 371 373 374 386
390
## [73] 391 392 393 394 395 397 398 400 402 406 410 417 422 423 428 431 432
435
## [91] 437 439 447 452 453 454 455 456 458 461 465 466 469 470 471 474 475
486
## [109] 492 494 495 498 499 503 513 518 526 527 533 538 539 540 544 549 553
557
## [127] 563 568
Coeficientes por los que se multiplican las observaciones para obtener
el vector perpendicular al hiperplano que resuelve el problema
modelo$coefs #Coeficientes
## [,1]
## [1,] 1000.0000
## [2,] 1000.0000
## [3,] 1000.0000
## [4,] 1000.0000
## [5,] 1000.0000
## [6,] 1000.0000
## [7,] 1000.0000
## [8,] 1000.0000
## [9,] 623.3655
## [10,] 1000.0000
## [11,] 1000.0000
## [12,] 1000.0000
## [13,] 1000.0000
## [14,] 1000.0000
## [15,] 1000.0000
## [16,] 1000.0000
## [17,] 1000.0000
## [18,] 1000.0000
## [19,] 1000.0000
## [20,] 1000.0000
## [21,] 1000.0000
## [22,] 1000.0000
## [23,] 1000.0000
## [24,] 1000.0000
## [25,] 1000.0000
## [26,] 1000.0000
## [27,] 1000.0000
## [28,] 1000.0000
## [29,] 1000.0000
## [30,] 1000.0000
## [31,] 1000.0000
## [32,] 1000.0000
## [33,] 1000.0000
## [34,] 1000.0000
## [35,] 1000.0000
## [36,] 1000.0000
## [37,] 1000.0000
## [38,] 1000.0000
## [39,] 1000.0000
## [40,] 1000.0000
## [41,] 1000.0000
## [42,] 1000.0000
## [43,] 1000.0000
## [44,] 1000.0000
## [45,] 1000.0000
## [46,] 1000.0000
## [47,] 1000.0000
## [48,] 1000.0000
## [49,] 1000.0000
## [50,] 1000.0000
## [51,] 1000.0000
## [52,] 1000.0000
## [53,] 1000.0000
## [54,] 1000.0000
## [55,] 1000.0000
## [56,] 1000.0000
## [57,] 1000.0000
## [58,] 1000.0000
## [59,] 1000.0000
## [60,] 620.7901
## [61,] 1000.0000
## [62,] 1000.0000
## [63,] 1000.0000
## [64,] 1000.0000
## [65,] -1000.0000
## [66,] -1000.0000
## [67,] -244.1556
## [68,] -1000.0000
## [69,] -1000.0000
## [70,] -1000.0000
## [71,] -1000.0000
## [72,] -1000.0000
## [73,] -1000.0000
## [74,] -1000.0000
## [75,] -1000.0000
## [76,] -1000.0000
## [77,] -1000.0000
## [78,] -1000.0000
## [79,] -1000.0000
## [80,] -1000.0000
## [81,] -1000.0000
## [82,] -1000.0000
## [83,] -1000.0000
## [84,] -1000.0000
## [85,] -1000.0000
## [86,] -1000.0000
## [87,] -1000.0000
## [88,] -1000.0000
## [89,] -1000.0000
## [90,] -1000.0000
## [91,] -1000.0000
## [92,] -1000.0000
## [93,] -1000.0000
## [94,] -1000.0000
## [95,] -1000.0000
## [96,] -1000.0000
## [97,] -1000.0000
## [98,] -1000.0000
## [99,] -1000.0000
## [100,] -1000.0000
## [101,] -1000.0000
## [102,] -1000.0000
## [103,] -1000.0000
## [104,] -1000.0000
## [105,] -1000.0000
## [106,] -1000.0000
## [107,] -1000.0000
## [108,] -1000.0000
## [109,] -1000.0000
## [110,] -1000.0000
## [111,] -1000.0000
## [112,] -1000.0000
## [113,] -1000.0000
## [114,] -1000.0000
## [115,] -1000.0000
## [116,] -1000.0000
## [117,] -1000.0000
## [118,] -1000.0000
## [119,] -1000.0000
## [120,] -1000.0000
## [121,] -1000.0000
## [122,] -1000.0000
## [123,] -1000.0000
## [124,] -1000.0000
## [125,] -1000.0000
## [126,] -1000.0000
## [127,] -1000.0000
## [128,] -1000.0000
Termino independiente
modelo$rho #Término Independiente
## [1] -0.6763177
Trazado del Hiperplano
Con toda esta información es posible calcular el hiperplano que da la la regla de
clasificación w0+w′x=0, donde w0 es el valor contenido en modelo$rho cambiado de signo,
(con S el conjunto de índices de los vectores soporte) y representar gráficamente la regla
resultante:
[Link] <- x[modelo$index,]
w <- crossprod([Link], modelo$coefs)
w0 <- modelo$rho
plot(x, pch = pchn, bg = colores, xlab='suavidad', ylab='puntos Concavos')
abline(w0/w[2], -w[1]/w[2], lwd=2, col='blue')
Selección de una submuestra del 70% de los datos para
entrenamiento del modelo
[Link] <- nrow(cancerMama)
[Link] <- round([Link]*0.7) #70% de datos
[Link] <- sample(2:[Link] , size=[Link])
[Link] <- cancerMama[[Link],] #datos para el entrenamiento del
modelo
[Link] <- cancerMama[-[Link],] #datos para probar el modelo
#datos para entrenamiento
str([Link])
## '[Link]': 398 obs. of 3 variables:
## $ [Link] : num 0.0977 0.0909 0.0884 0.1169 0.0992 ...
## $ [Link]: num 0.0324 0.0164 0.0389 0.0849 0.0378 ...
## $ y : Factor w/ 2 levels "0","1": 1 1 1 2 1 1 2 1 2 1 ...
el 30% restante para la prueba del modelo
str([Link])
## '[Link]': 171 obs. of 3 variables:
## $ [Link] : num 0.0978 0.0898 0.086 0.0864 0.1066 ...
## $ [Link]: num 0.04781 0.02923 0.00592 0.01115 0.04375 ...
## $ y : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
Ejecución del modelo SVM (Entrenamiento)
C <- 10^3 #Costo
modelo<- svm(y~., data=[Link], kernel='linear', cost=C, cross=2,
scale=FALSE)
summary(modelo)
##
## Call:
## svm(formula = y ~ ., data = [Link], kernel = "linear", cost = C,
## cross = 2, scale = FALSE)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 1000
##
## Number of Support Vectors: 97
##
## ( 48 49 )
##
##
## Number of Classes: 2
##
## Levels:
## 0 1
##
## 2-fold cross-validation on training data:
##
## Total Accuracy: 90.95477
## Single Accuracies:
## 90.45226 91.45729
El modelo tiene una presicion de 92%
Predicción de los restantes (Datos de Entrenamiento)
prediccion <- predict(modelo,new=[Link])
Tabla de confusión o Matriz de Confusion.
(mc <- with([Link],(table(prediccion,y))))
## y
## prediccion 0 1
## 0 101 8
## 1 2 60
% correctamente clasificados
(correctos <- sum(diag(mc)) / nrow([Link]) *100)
## [1] 94.15205
conclusión
El modelo entrenado de tipo lineal tiene una Precisión de clasificacion de un 91.22%, lo que
nos permitiria concluir que es un modelo confiable para predecir si un tumor es maligno o
benigno de esa forma prevenir y tratar a tiempo esta enfermedad (Cancer de Mama).