Ejemplo de regresión logística con PCA

Autor: | Última modificación: 14 de noviembre de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post:

En este artículo realizaremos un ejemplo de regresión logística con PCA por medio de un dataset que muestra tejidos de diferentes tumores de mama. Algunos son benignos y otros malignos.

Regresión logística con PCA: ejemplo

Vamos a hacer un clasificador para diferenciarlos:

#regresión logística con PCA
library (pracma)
library (dplyr)
set.seed (1234)
wdbc <- read.csv ("data/wdbc.data", col.names = c ("id", "diagnosis", paste0 ("c", 1 : 30)), stringsAsFactor = T)
str (wdbc)
wdbc <- wdbc %>% select (-id)
idx <- sample (1 : nrow (wdbc), round (nrow (wdbc) * 0.7))
wdbc.train <- wdbc [ idx, ]
wdbc.test <- wdbc [ -idx, ]
prwdbc <- prcomp (wdbc.train %>% select (-diagnosis), center = TRUE, scale. = TRUE)
#Comprobamos que los 5 primeros autovalores contienen aproximadamente el 90% de la varianza
plot (cumsum (prwdbc$sdev ^ 2 / sum (prwdbc$sdev ^ 2)), main = "Autovalores")
grid ()
wdbc.train_pca <- as.data.frame (prwdbc$x [ , 1 : 2])
ejemplo de regresión logística con PCA
wdbc <- wdbc %>% select ( -id )

idx <- sample (1 : nrow (wdbc), round (nrow (wdbc) * 0.7))
wdbc.train <- wdbc [ idx, ] wdbc.test <- wdbc [ -idx, ]
dim (wdbc.train)

398 31

#regresión logística con PCA
prwdbc <- prcomp (wdbc.train %>% select (-diagnosis), center = TRUE, scale. = TRUE)
#Comprobamos que los 5 primeros autovalores contienen aproximadamente el 90% de la varianza
plot (cumsum (prwdbc$sdev ^ 2 / sum (prwdbc$sdev ^ 2)), main = "Autovalores")
grid ()
Ejemplo de regresión logística con PCA 1
wdbc.train_pca <- as.data.frame (prwdbc$x [ , 1 : 2])
wdbc.train_pca$diagnosis <- wdbc.train$diagnosis
summary (wdbc.train_pca)
Ejemplo de regresión logística con PCA 2
ggplot (wdbc.train_pca, aes (x = PC1, y = PC2, color = diagnosis)) + geom_point ()
Ejemplo de regresión logística con PCA 3
model_wdbc <- glm (data = wdbc.train_pca, formula = diagnosis~., family = binomial (link = 'logit'))
summary (model_wdbc)
Ejemplo de regresión logística con PCA 4
y_predict <- predict (model_wdbc, wdbc.train_pca)
y_factor <- as.factor (ifelse (y_predict < 0, "B", "M"))

table (real = wdbc.train$diagnosis, pred = y_factor)
Ejemplo de regresión logística con PCA 5
predict (prwdbc, wdbc.test %>% select (-diagnosis)) [ , c ("PC1", "PC2")]
Ejemplo de regresión logística con PCA 6
#regresión logística con PCA
wdbc.test_pca <- as.data.frame (predict (prwdbc, wdbc.test %>% select (-diagnosis))[ , c ("PC1", "PC2")])
summary (wdbc.test_pca)
Ejemplo de regresión logística con PCA 7
y_predict <- predict (model_wdbc, wdbc.test_pca)
y_factor <- as.factor (ifelse (y_predict < 0, "B", "M"))

table (real = wdbc.test$diagnosis, pred = y_factor)
Ejemplo de regresión logística con PCA 8
cf_m <- caret :: confusionMatrix (data = y_factor, reference = wdbc.test$diagnosis, positive = "M")
cf_m
Ejemplo de regresión logística con PCA 9
paste ("La precisión es:", cf_m$table [2, 2] / sum (cf_m$table [2, ]))
paste ("La exhaustividad (recall, sensitivity) es:", cf_mstable [2, 2] / sum (cf_mstable[ , 2]))
paste ("La exactitud (accuracy) es:", (cf_mstable [2, 2] + cf_mstable [1, 1]) / sum (cf_mstable))

bnt_test = binom.test (cf_mstable [2, 2] + cf_mstable [1, 1], sum (cf_mstable))
paste ("El intervalo de confianza de la exactitud es: [".paste0 (bnt_testsconf.int, collapse = ","), "]")
Ejemplo de regresión logística con PCA 10
library (ROCR)

p <- predict (model_wdbcwdbc.test_pca, type = "response"}

pr <- prediction (p, wdbc.test$diagnosis)

prf_auc = performance (pr, measure = "auc")
paste ("The AUC is", [email protected][[1]])

prf <- performance (pr, measure "tpr", x.measure = "fpr")
plot (prf)
Ejemplo de regresión logística con PCA 11
wdbc.train
Ejemplo de regresión logística con PCA 12
model _wdbc_lin <- glm (data = wdbc.train, formula = diagnosis~., family = binomial (link = 'logit'))
summary (model_wdbc_lin)
Ejemplo de regresión logística con PCA 13
Ejemplo de regresión logística con PCA 14
y_predict <- predict (model_wdbc_lin, wdbc.train)
y_factor <- as.factor (ifelse (y_predict < 0, "B", "M"))

table (real = wdic.trainsdiagnosis, pred = y_factor)
y_predict <- predict (model_wdbc_lin, wdbc.test)
y_factor <- as.factor (ifelse (y_predict < 0, "B", "M"))

table (real = wdbc.test$diagnosis, pred = y_factor)

¿Qué sigue?

Si te ha gustado la temática de este pos, recuerda que puedes seguir aprendiendo con nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en donde aprenderás todo lo necesario para incursionar en el mundo laboral. ¡Solicita más información y empieza a cambiar tu vida!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.