Lectura de datos

library(readr)
Census <- read_csv("E:/U-MAQUINAS DE APRENDIZAJE/EXAMEN PARCIAL/Census.csv")
## Rows: 32561 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (14): V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Census[,14]<-as.factor(Census$V14)

Eliminando datos perdidos

Census=na.omit(Census)
dim(Census)
## [1] 30162    14
sum(is.na(Census))
## [1] 0

Selecciona 1500 para entrenar y 500 para Prueba

set.seed(2023)
muestra <- sample(nrow(Census), 2000) 
Census_data <- Census[muestra,]
set.seed(2023)
muestra <- sample(2000, 1500) 
entrenamiento <- Census_data[muestra,]
prueba        <- Census_data[-muestra,]

dim(entrenamiento)[1]
## [1] 1500
dim(prueba)[1]
## [1] 500

Aplicacion del clasificador SVM

library("e1071")
## Warning: package 'e1071' was built under R version 4.2.3
svm_model1 <- svm(V14 ~ ., data=entrenamiento, kernel="linear",scale = TRUE)
svm_model2 <- svm(V14 ~ ., data=entrenamiento, kernel="polynomial",scale = TRUE)
svm_model3 <- svm(V14 ~ ., data=entrenamiento, kernel="sigmoid",scale = TRUE)
svm_model4 <- svm(V14 ~ ., data=entrenamiento, kernel="radial",scale = TRUE)

Presentación del gráfico

Analisis grafico de la variable V1 y V4

plot(x=svm_model1, data=entrenamiento, V1~V4)

plot(x=svm_model2, data=entrenamiento, V1~V4)

plot(x=svm_model3, data=entrenamiento, V1~V4)

plot(x=svm_model4, data=entrenamiento, V1~V4)

Se observa gráficamente que para las variables V1 y V4 los vectores de soporte clasifican las observaciones uno mejor que otro. Se opto por este par de variables debido a que presentan una mejor visualizacion grafica y comprension de la clasificacion.

Justifique los parámetros.

Se realizo el analisis manteniendo los hiperparametros por defecto, y creamos 4 modelos modificando solo el kernel para apreciar cual de ellos realiza una mejor clasificacion segun la disposicion de la muestra extraida, que a nivel cuantitativo se reflejara en la menor tasa de error.

summary(svm_model1)
## 
## Call:
## svm(formula = V14 ~ ., data = entrenamiento, kernel = "linear", scale = TRUE)
## 
## 
## Parameters:
##    SVM-Type:  C-classification 
##  SVM-Kernel:  linear 
##        cost:  1 
## 
## Number of Support Vectors:  532
## 
##  ( 268 264 )
## 
## 
## Number of Classes:  2 
## 
## Levels: 
##  1 2

Segun el resumen del modelo muestra:

Tasa de error

Matriz de confusion linear

pred = predict(svm_model1,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 355  49
##         2  23  73
TCC1 = sum(diag(tab)/sum(tab))
TE1 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion polynomial

pred = predict(svm_model2,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 368  84
##         2  10  38
TCC2 = sum(diag(tab)/sum(tab))
TE2 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion sigmoid

pred = predict(svm_model3,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 326  59
##         2  52  63
TCC3 = sum(diag(tab)/sum(tab))
TE3 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion radial

pred = predict(svm_model4,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 355  53
##         2  23  69
TCC4 = sum(diag(tab)/sum(tab))
TE4 = 1-sum(diag(tab)/sum(tab))

Resumen

tabla<-data.frame(row.names = c("Tasa de correcta Clasificacion","Tasa de Error"),
                  "linear"=c(TCC1,TE1),
                  "polynomial"=c(TCC2,TE2),
                  "sigmoid"=c(TCC3,TE3),
                  "radial"=c(TCC4,TE4))
tabla
##                                linear polynomial sigmoid radial
## Tasa de correcta Clasificacion  0.856      0.812   0.778  0.848
## Tasa de Error                   0.144      0.188   0.222  0.152

Eliminando las variables V9, V10 y V11 y usando el modelo radial y lineal

library("e1071")
svm_model1 <- svm(V14 ~ ., data=entrenamiento[,-c(9,10,11)], kernel="linear",scale = TRUE)
svm_model2 <- svm(V14 ~ ., data=entrenamiento[,-c(9,10,11)], kernel="polynomial",scale = TRUE)
svm_model3 <- svm(V14 ~ ., data=entrenamiento[,-c(9,10,11)], kernel="sigmoid",scale = TRUE)
svm_model4 <- svm(V14 ~ ., data=entrenamiento[,-c(9,10,11)], kernel="radial",scale = TRUE)

Matriz de confusion linear

pred = predict(svm_model1,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 352  60
##         2  26  62
TCC1 = sum(diag(tab)/sum(tab))
TE1 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion polynomial

pred = predict(svm_model2,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 365  78
##         2  13  44
TCC2 = sum(diag(tab)/sum(tab))
TE2 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion sigmoid

pred = predict(svm_model3,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 330  63
##         2  48  59
TCC3 = sum(diag(tab)/sum(tab))
TE3 = 1-sum(diag(tab)/sum(tab))

Matriz de confusion radial

pred = predict(svm_model4,prueba)
tab = table(Predicted=pred, Actual = prueba$V14)
tab
##          Actual
## Predicted   1   2
##         1 357  68
##         2  21  54
TCC4 = sum(diag(tab)/sum(tab))
TE4 = 1-sum(diag(tab)/sum(tab))

Resumen

tabla<-data.frame(row.names = c("Tasa de correcta Clasificacion","Tasa de Error"),
                  "linear"=c(TCC1,TE1),
                  "polynomial"=c(TCC2,TE2),
                  "sigmoid"=c(TCC3,TE3),
                  "radial"=c(TCC4,TE4))
tabla
##                                linear polynomial sigmoid radial
## Tasa de correcta Clasificacion  0.828      0.818   0.778  0.822
## Tasa de Error                   0.172      0.182   0.222  0.178