0% encontró este documento útil (0 votos)
68 vistas9 páginas

Test

El documento describe el uso de un modelo de clasificación SVM lineal en R para predecir si tumores de mama son benignos o malignos en base a características de las células. Se cargan los datos, se entrena el modelo con el 70% de los datos y se obtienen coeficientes e índices de vectores de soporte con una precisión de clasificación del 91%.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
68 vistas9 páginas

Test

El documento describe el uso de un modelo de clasificación SVM lineal en R para predecir si tumores de mama son benignos o malignos en base a características de las células. Se cargan los datos, se entrena el modelo con el 70% de los datos y se obtienen coeficientes e índices de vectores de soporte con una precisión de clasificación del 91%.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

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).

También podría gustarte