Inicio › Foros › Etapa III – Ciencia de Datos › Hoja de Trabajo: Bloque 6.4. Clasificación Binaria
- Este debate tiene 5 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 4 años, 3 meses por
Jordi.
-
AutorEntradas
-
17 diciembre, 2021 a las 8:56 #12643
roderikoutParticipanteAquí la hoja resuelta, me costó encontrar la solución a varios errores en el código de la hoja.
Igualmente me costó entender cómo hacer la curva ROC con esta data, espero que esté bien.Saludos,
27 diciembre, 2021 a las 13:43 #12657
JordiSuperadministradorHola,
La curva ROC no es correcta.
Me puedes pasar el código para revisarla y los datos que has usado?
Abrazos!
27 diciembre, 2021 a las 18:42 #12689
roderikoutParticipanteAquí el código que usé para calcular toda la hoja con la curva ROC al final del código:
#Parte 2 Clasificadores
###############
#breast cancer
################ load libraries
library(mlbench)
library(caret)
# Load data
data(BreastCancer)
datos <- BreastCancerdatos <- datos[,-1]
datos
set.seed(7)
validation_index <- createDataPartition(BreastCancer$Class, p=0.80, list=FALSE)
# select 20% of the data for validation
validation <- BreastCancer[-validation_index,]
# use the remaining 80% of data to training and testing the models
dataset <- BreastCancer[validation_index,]
# Remove redundant variable Id
dataset <- dataset[,-1]
validation <- validation[,-1]
# convert input values to numeric
for(i in 1:9) {
datos[,i] <- as.numeric(as.character(datos[,i]))
dataset[,i] <- as.numeric(as.character(dataset[,i]))
validation[,i] <- as.numeric(as.character(validation[,i]))
}datos$fClass <- datos$Class == «benign»
# summary
summary(dataset)####Entrenamiento
control <- trainControl(method=»repeatedcv», number=10, repeats=3)
metric <- «Accuracy»
fit.cart <- train(Class~., data=dataset, method=»rpart», metric=metric, preProc=c(«BoxCox»), trControl=control, na.action=na.omit)###dibujar plot
# plot tree
install.packages(«rattle»)
install.packages(«caret»)
library(rattle)
fancyRpartPlot(fit.cart $finalModel)#### FINALIZAR
# FinalizedatasetNOmiss <- dataset[complete.cases(dataset),]
validationNomiss <- validation[complete.cases(validation),]
x <- datasetNOmiss[,1:9]
for(i in 1:9) {
x[,i] <- as.numeric(as.character(x[,i]))
}# make predictions
set.seed(7)
preprocessParams <- preProcess(x, method=c(«BoxCox»))predictions <- predict(fit.cart, newdata = validationNomiss)
confusionMatrix(predictions, validationNomiss$Class)#CURVA ROC
# MODELO
#*******************************************************************************
# PASO 3.1. Cálculo Modelo Logístico
#*******************************************************************************
mylogit <- glm(Class ~ Cl.thickness + Marg.adhesion + Bare.nuclei + Bl.cromatin + Normal.nucleoli, data = datos, family = «binomial»)
# Resultados del modelo logístico
summary(mylogit) # todos los coeficientes son significativos!!!#*******************************************************************************
# PASO 3.2. Calidad del Modelo Logístico
#*******************************************************************************
# Hosmer and Lemeshow goodness of fit (GOF) test
hoslem.test(mylogit$y, fitted(mylogit), g=10)prediccion <- plogis(predict(mylogit, datos))
# a. Error de Clasificacion
misClassError(datos$fClass, prediccion, threshold = 0.5)
# b. # a. CURVA ROC -> válido para modelos logísticos con variables dicotómicas
plotROC(datos$fClass, prediccion)
# c. Conconrdancia
Concordance(datos$fClass, prediccion)1 febrero, 2022 a las 9:15 #12919
JordiSuperadministradordatos$fClass, prediccion
Estos dos vectores deben ser probabilidades de 0 a 1.
¿Lo tienes así?
11 febrero, 2022 a las 22:33 #13006
roderikoutParticipanteA ver, «predicción» primero comienza siendo un vector dicotómico Benigno-Maligno cuando le asigno a: predictions <- predict(fit.cart, newdata = validationNomiss)
Luego, más adelante, en prediccion <- plogis(predict(mylogit, datos)), se convierte en probabilidades 0 a 1.
Pero con datos$FClass pasa a dicotómica (false o true Beningn), y no sabría como pasarlos a probabilidad. Esas son las cosas que no me quedan claras al ver la receta completa sin entender bien los detalles internos de lo que hace cada función. En ningún momento pasa a ser un vector de probabilidades.
Igual hice de nuevo la curva ROC y ahora me quedó muy diferente. El AUROC es de 0.0052 que creo que tampoco está bien.
No sé en qué punto se pasa datos$FClass a probabilidades.
17 febrero, 2022 a las 10:18 #13050
JordiSuperadministradorSi pones predict(m, newdata, type=»response») te saldrá en probabilidades.
Donde m es el modelo. newdata es el data frame con nuevos datos para hacer predicciones y el type = «response» te permite calcular las probabilidades.
Un gran abrazo!»
-
AutorEntradas
- Debes estar registrado para responder a este debate.