A continuación, se presenta un resumen de los más levante que
engloba el tema de Minería de Datos; por ende, contendrá en cada subtema
su respectiva descripción y código representativo de la explicación.
La minería de datos es un proceso, el cual implica la exploración y análisis de grandes volúmenes de datos. En otras palabras, busca encontrar patrones, tendencias y relaciones que no se persiben a simple vista; cabe mencionar que, dos de los enfoques más reconocidos en este campo son CRISP-DM (Cross-Industry Standard Process for Data Mining) y KDD (Knowledge Discovery in Databases). Por lo tanto,la minería de datos se basa en técnicas estadísticas y algoritmos de aprendizaje automático para identificar dichos patrones y realizar predicciones basadas en los datos analizados.
Cross-Industry Standard Process for Data Mining (CRISP-DM) es un metodo ampliamente utilizada en minería de datos, se estructura en seis fases interrelacionadas al permitir un enfoque iterativo y adaptativo, como se observa en la fig 1.
Figura 1. Fases del ciclo de vida CRISP-DM
Descripción de las fases del ciclo:
Comprensión del Negocio: Identificación de los objetivos y requisitos del proyecto, asegurando que el análisis esté alineado con las necesidades empresariales; en otras palabras, se define objetivos y requisitos.
Comprensión de los Datos: Recolección y exploración inicial de los datos disponibles, con ello familiarizarse con su contenido y calidad; en otras palabras, recolección y exploración inicial.
Preparación de los Datos: Esta se basa en la limpieza, transformación y selección de datos adecuados para el modelado. Por lo tanto, en esta fase incluye la eliminación de ruido, manejo de valores faltantes y creación de variables derivadas.
Modelado: Aplicación de técnicas de minería de datos para construir modelos predictivos o descriptivos, en esta fase puede implicar la selección de algoritmos adecuados según el tipo de problema.
Evaluación: Análisis del modelo construido para determinar su efectividad y adecuación a los objetivos iniciales. Por ende, se evalúan métricas como precisión, recall y F1-score.
Despliegue: Implementación del modelo en un entorno real, lo que puede incluir la creación de informes o la integración del modelo en sistemas existentes.
KDD (Knowledge Discovery in Databases) es un proceso más amplio que abarca la extracción de conocimiento a partir de bases de datos, enfatizando la importancia de cada etapa en el descubrimiento efectivo del conocimiento. Por lo tanto, se centra en el proceso completo de descubrimiento, desde la selección de datos hasta la interpretación final, enfatizando la importancia del preprocesamiento.
Figura 2. Fases del ciclo de vida KDD
Las fases principales son (se percibe en la fig
2):
Selección: Identificación y recolección de datos relevantes para el análisis.
Procesamiento: Limpieza y transformación de los datos para eliminar inconsistencias y preparar los datos para el análisis.
Transformación: Conversión de los datos preprocesados en un formato adecuado para el análisis, lo que puede incluir la normalización o agregación.
Minería de datos: Aplicación de algoritmos para descubrir patrones interesantes en los datos, utilizando técnicas como clustering, clasificación o asociación.
Evaluación: Validación y análisis crítico de los patrones descubiertos para asegurar su utilidad y aplicabilidad.
Presentación: Comunicación efectiva de los resultados obtenidos a través del proceso KDD, utilizando visualizaciones o reportes que faciliten la comprensión por parte de las partes interesadas.
En resumen, se obtiene lo siguiente:
Ambas metodologías, CRISP-DM y KDD, ofrecen enfoques valiosos para abordar proyectos de minería de datos, cada una con sus propias fortalezas. Por lo tanto, la elección entre ellas dependerá del contexto específico del proyecto, así como de los objetivos empresariales y técnicos involucrados.
La preparación de datos es un proceso fundamental en la minería de datos que incluye la importación, limpieza y transformación de los datos para su análisis. A continuación, se presentan un ejemplo práctico utilizando el conjunto de datos Titanic.
Conjunto de datos “Titanic”
Este conjunto de datos proporciona información sobre el destino de los pasajeros del fatal viaje inaugural del transatlántico ‘Titanic’, estos datos fueron recopilados originalmente por la Junta de Comercio Británica en su investigación del naufragio. Cabe señalar que, no existe un acuerdo total entre las fuentes primarias en cuanto al número exacto de personas a bordo, rescatadas o perdidas. Por lo tanto, la fuente proporciona un conjunto de datos que registra la clase, el sexo, la edad y el estado de supervivencia de cada persona a bordo del Titanic, y se basa en datos recopilados originalmente por la Junta de Comercio Británica.
La importación de datos es el primer paso en el análisis de datos. Cabe mencionar que, se pueden utilizar bases de datos o dataset del mismo R ó un archivo .CSV (almacena datos tabulares). Dependiendo de la elección, por ejemplo, en un archivo .CSV se pueden importar con “read.csv” del paquete readr.
# Necesario instalar y cargar las librerías a utilizar
library(dplyr)
library(tidyr)
library(readr)
library(ggplot2)
library(reshape2)
library(caret) # Para la normalización
library(FactoMineR) # Para PCA
library(rpart)
library(rpart.plot)
library(randomForest)
library(e1071)
library(cluster)
# Ejemplo: Importar desde un archivo .CSV
titanic_data <- read.csv("/Users/anacastillo/Downloads/Titanic-Dataset.csv")
# Visualizar las primeras filas del dataset
head(titanic_data)Los valores duplicados pueden distorsionar los resultados del análisis; por ende, es esencial identificarlos y eliminarlos para asegurar la integridad del conjunto de datos.
## [1] TRUE TRUE TRUE TRUE TRUE TRUE
#SubVector sin datos duplicados
titanic_cleaned_data = titanic_data[!data_duplicated,]
head(titanic_cleaned_data)Los valores incorrectos o atípicos pueden surgir debido a errores en la entrada de datos y deben ser tratados adecuadamente para evitar sesgos en el análisis.
# Boxplot para visualización
boxplot(titanic_cleaned_data$Age, main = "Boxplot Edades", ylab = "Edad")#Identificar
Q1 = quantile(titanic_cleaned_data$Age, 0.25, na.rm=TRUE)
Q3 = quantile(titanic_cleaned_data$Age, 0.75, na.rm=TRUE)
#Rango
IQR = Q3 - Q1
#Limite inferior y superior
LimiteInf = Q1 - 1.5 * IQR
LimiteSup = Q3 + 1.5 * IQR
#Sin datos atipicos
dataSinOutliners = titanic_cleaned_data[titanic_cleaned_data$Age >= LimiteInf &
titanic_cleaned_data$Age <= LimiteSup |
is.na(titanic_cleaned_data$Age),]
boxplot(dataSinOutliners$Age, main = "Boxplot Edades", ylab = "Edad")Los valores faltantes son comunes en conjuntos de datos reales y pueden manejarse mediante eliminación o imputación.
#Eliminar las filas que presenten datos faltantes
titanic_cleaned_data = na.omit(titanic_cleaned_data)
head(titanic_cleaned_data)#Para visualizar algunos resultados relevantes después de la limpieza:
#Histograma de edades después de quitar los valores faltantes
hist(titanic_cleaned_data$Age, main = "Histograma: Distribución de Edades",
xlab = "Edad",
ylab="Frecuencia"
)El escalado y normalización son técnicas utilizadas para ajustar la escala de los datos numéricos, lo que es especialmente importante para algoritmos de aprendizaje automático.
# Normalizar la columna fare
titanic_scaled_data <- titanic_cleaned_data %>%
mutate(Fare = scale(Fare))
# Visualizar resultado final
head(titanic_scaled_data)Para utilizar las librerías dplyr y tidyr en R, es fundamental entender sus funciones principales; cabe mencionar que, se deben instalar previamente y cargar en R: install.packages(“tidyverse”) O install.packages(“dplyr”).
Principales funciones de dplyr
dplyr proporciona una serie de “verbos” que facilitan la manipulación de data frames:
Ejemplo:
#Uso de dplyr para seleccionar y filtrar
# Filtrar personas mayores de 50 años y seleccionar el nombre
result_dplyr <- titanic_cleaned_data %>%
filter(Age > 50) %>%
select(Name)
head(result_dplyr)Principales funciones de tidyr
tidyr se centra en la estructura de los datos, permitiendo convertir entre formatos “anchos” y “largos”, así como limpiar y organizar los datos:
Ejemplo
## [1] "Braund, Mr. Owen Harris"
## [2] "Cumings, Mrs. John Bradley (Florence Briggs Thayer)"
## [3] "Heikkinen, Miss. Laina"
## [4] "Futrelle, Mrs. Jacques Heath (Lily May Peel)"
## [5] "Allen, Mr. William Henry"
## [6] "McCarthy, Mr. Timothy J"
#Uso de tidyr para separar el nombre y apellido
titanic_separated <- titanic_cleaned_data %>%
separate(Name, into = c("LastName", "Name"), sep = ",")
#Separado
titanic_names <- titanic_separated %>%
select(LastName, Name)
head(titanic_names)Para la importación de los datos, se utiliza “read.csv()” para cargar el dataset del Titanic desde un archivo CSV. Con ello, proceder con la eliminación de duplicados, en donde, se utilizó la función “duplicated()” para las fila duplicada en el dataset y para el manejo de los valores faltantes, se utilizó la función “na.omit”. Del mismo modo, se utiliza un boxplot para visualizar los outliers o datos atipicos en la columna Age y se eliminan los outliers utilizando el rango intercuartílico (IQR).Como ultimo, se las columna Fare se normaliza con la función scale().
El análisis exploratorio de datos (EDA) es un enfoque para analizar conjuntos de datos con el objetivo de resumir sus principales características, frecuentemente utilizando técnicas visuales. A continuación, se presentarán estadísticas descriptivas y visualizaciones del conjunto de datos Titanic.
Las estadísticas descriptivas proporcionan un resumen numérico de las características del conjunto de datos, incluyendo medidas como la media(promedio aritmético de un conjunto de valores), mediana(valor central; robusta ante valores atípicos), moda(valor más frecuente).
## PassengerId Survived Pclass Name
## Min. : 1.0 Min. :0.0000 Min. :1.000 Length:714
## 1st Qu.:222.2 1st Qu.:0.0000 1st Qu.:1.000 Class :character
## Median :445.0 Median :0.0000 Median :2.000 Mode :character
## Mean :448.6 Mean :0.4062 Mean :2.237
## 3rd Qu.:677.8 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :891.0 Max. :1.0000 Max. :3.000
## Sex Age SibSp Parch
## Length:714 Min. : 0.42 Min. :0.0000 Min. :0.0000
## Class :character 1st Qu.:20.12 1st Qu.:0.0000 1st Qu.:0.0000
## Mode :character Median :28.00 Median :0.0000 Median :0.0000
## Mean :29.70 Mean :0.5126 Mean :0.4314
## 3rd Qu.:38.00 3rd Qu.:1.0000 3rd Qu.:1.0000
## Max. :80.00 Max. :5.0000 Max. :6.0000
## Ticket Fare Cabin Embarked
## Length:714 Min. : 0.00 Length:714 Length:714
## Class :character 1st Qu.: 8.05 Class :character Class :character
## Mode :character Median : 15.74 Mode :character Mode :character
## Mean : 34.69
## 3rd Qu.: 33.38
## Max. :512.33
# O calcular las estadísticas descriptivas por cada una
stats_descrip <- titanic_cleaned_data %>%
summarise(
Media_Edad = mean(Age, na.rm = TRUE),
Mediana_Edad = median(Age, na.rm = TRUE),
Varianza_Edad = var(Age, na.rm = TRUE),
Desviacion_Edad = sd(Age, na.rm = TRUE),
Media_Fare = mean(Fare, na.rm = TRUE),
Mediana_Fare = median(Fare, na.rm = TRUE),
Varianza_Fare = var(Fare, na.rm = TRUE),
Desviacion_Fare = sd(Fare, na.rm = TRUE)
)
# Mostrar estadísticas descriptivas
stats_descripLos histogramas son útiles para visualizar la distribución de una variable numérica; con ello, permiten observar la frecuencia de los valores en diferentes intervalos.
# Histograma de edad
hist(titanic_cleaned_data$Age, main = "Histograma de Edades",
xlab = "Edad",
ylab="Frecuencia"
)Los diagramas de caja (boxplots) son útiles para visualizar la dispersión y detectar valores atípicos en los datos.
# Diagrama de caja para la edad por clase
ggplot(titanic_cleaned_data, aes(x = factor(Pclass), y = Age)) +
geom_boxplot(fill = "lightblue") +
labs(title = "Diagrama de Caja de Edades por Clase", x = "Clase", y = "Edad") +
theme_minimal()Los diagramas de dispersión son utilizados para observar la relación entre dos variables numéricas.
# Diagrama de dispersión entre Fare y Age
ggplot(titanic_cleaned_data, aes(x = Fare, y = Age)) +
geom_point(alpha=0.5) +
labs(title = "Diagrama de Dispersión entre Tarifa y Edad", x = "Tarifa", y = "Edad") +
theme_minimal()Identificar correlaciones entre variables es crucial para entender cómo se relacionan entre sí.
# Calcular la matriz de correlación
correlation_matrix <- cor(titanic_cleaned_data %>% select(Age, Fare), use="complete.obs")
# Mostrar la matriz de correlación
correlation_matrix## Age Fare
## Age 1.00000000 0.09606669
## Fare 0.09606669 1.00000000
# Convertir la matriz a formato largo
melted_correlation <- melt(correlation_matrix)
# Gráfico de calor para la matriz de correlación
ggplot(melted_correlation, aes(Var1, Var2, fill=value)) +
geom_tile() +
scale_fill_gradient2(low="blue", high="red", mid="white", midpoint=0) +
labs(title="Matriz de Correlación", x="", y="") +
theme_minimal() +
theme(axis.text.x=element_text(angle=45, hjust=1))El análisis exploratorio es fundamental para comprender las características del conjunto de datos Titanic. Dado que, a través del uso de estadísticas descriptivas y visualizaciones, se pueden identificar patrones importantes y relaciones entre variables.
La reducción de dimensionalidad es una técnica utilizada en minería de datos y aprendizaje automático para simplificar modelos sin perder información significativa. Una de las técnicas más comunes es el Análisis de Componentes Principales (PCA).
El Análisis de Componentes Principales (PCA) es una técnica estadística que transforma un conjunto de variables posiblemente correlacionadas en un conjunto de variables no correlacionadas llamadas componentes principales. Dichos componentes, son ordenados por la cantidad de varianza que explican del conjunto original, permitiendo así reducir la dimensionalidad del conjunto de datos mientras se conserva la mayor parte de la variabilidad.
El PCA se basa en la descomposición en valores propios (eigenvalues) y vectores propios (eigenvectors) de la matriz de covarianza del conjunto de datos. Los primeros componentes principales capturan la mayor parte de la variabilidad, mientras que los últimos componentes explican cada vez menos.
# Para mejor comprensión del proceso, se reitera que se debe manejar los valores faltantes(ya se realizo, pero si no es el caso se realiza lo siguiente)
titanic_pca_data <- titanic_data %>%
select(Age, Fare, Pclass) %>%
na.omit()
# Y del mismo caso, la normalizar los datos
titanic_pca_data_scaled <- scale(titanic_pca_data)
# PCA
pca_result <- prcomp(titanic_pca_data_scaled, center = TRUE, scale. = TRUE)
# Resumen del PCA
summary(pca_result)## Importance of components:
## PC1 PC2 PC3
## Standard deviation 1.3087 0.9548 0.6130
## Proportion of Variance 0.5709 0.3039 0.1253
## Cumulative Proportion 0.5709 0.8748 1.0000
Visualización del PCS
# Gráfico del porcentaje de varianza explicada por cada componente
screeplot(pca_result, main = "Scree Plot", col = "blue", pch = 19, xlab = "Componente",)# Dataframe con las coordenadas proyectadas
pca_scores <- as.data.frame(pca_result$x)
# Agregar la clase para visualización
pca_scores$Pclass <- titanic_data$Pclass[!is.na(titanic_data$Age) & !is.na(titanic_data$Fare)]
# Gráfico de dispersión en los dos primeros componentes principales
ggplot(pca_scores, aes(x = PC1, y = PC2, color = factor(Pclass))) +
geom_point(alpha=0.5) +
labs(title = "Proyección en los Primeros Dos Componentes Principales",
x = "Componente Principal 1",
y = "Componente Principal 2",
color = "Clase") +
theme_minimal()El Análisis de Componentes Principales (PCA) es una técnica para reducir la dimensionalidad y resaltar las características más importantes en un conjunto de datos, en este ejemplo práctico se observo con el conjunto de datos Titanic.
La predicción y clasificación son tareas fundamentales en minería de datos que permiten a los analistas de datos tomar decisiones informadas basadas en datos históricos.
-Predicción: Se refiere a la estimación de valores futuros basados en patrones identificados en datos históricos. Los modelos predictivos pueden ser utilizados para prever tendencias, comportamientos o resultados futuros. -Clasificación: Es el proceso de asignar una categoría a una observación basada en sus características. En este contexto, se utilizan algoritmos para predecir la clase a la que pertenece una instancia a partir de un conjunto de datos etiquetado.
La regresión lineal es un método estadístico que modela la relación entre una variable dependiente y una o más variables independientes utilizando una línea recta.
#Para mejor comprensión del proceso, se reitera que se debe manejar los valores faltantes(ya se realizo, pero si no es el caso se realiza lo siguiente)
titanic_regression_data <- titanic_data %>%
select(Age, Fare) %>%
na.omit()
# Ajustar un modelo de regresión lineal
linear_model <- lm(Fare ~ Age, data = titanic_regression_data)
# Resumen del modelo
summary(linear_model)##
## Call:
## lm(formula = Fare ~ Age, data = titanic_regression_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -42.42 -24.49 -17.60 2.33 475.78
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.3009 4.4922 5.410 8.64e-08 ***
## Age 0.3500 0.1359 2.575 0.0102 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 52.71 on 712 degrees of freedom
## Multiple R-squared: 0.009229, Adjusted R-squared: 0.007837
## F-statistic: 6.632 on 1 and 712 DF, p-value: 0.01022
Visualización
# Gráfico de dispersión con la línea de regresión
library(ggplot2)
ggplot(titanic_regression_data, aes(x = Age, y = Fare)) +
geom_point() +
geom_smooth(method = "lm", col = "blue") +
labs(title = "Regresión Lineal: Tarifa vs Edad", x = "Edad", y = "Tarifa")La regresión logística es un modelo utilizado para predecir la probabilidad de un evento binario (por ejemplo, supervivencia o no supervivencia) basado en uno o más predictores; se menciona que, se utiliza la función logística para limitar los resultados entre 0 y 1.
# Ajustar un modelo de regresión logística
logistic_model <- glm(Survived ~ Age + Sex + Pclass, data = titanic_data, family = binomial)
Visualización
##
## Call:
## glm(formula = Survived ~ Age + Sex + Pclass, family = binomial,
## data = titanic_data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 5.056006 0.502128 10.069 < 2e-16 ***
## Age -0.036929 0.007628 -4.841 1.29e-06 ***
## Sexmale -2.522131 0.207283 -12.168 < 2e-16 ***
## Pclass -1.288545 0.139259 -9.253 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 964.52 on 713 degrees of freedom
## Residual deviance: 647.29 on 710 degrees of freedom
## (177 observations deleted due to missingness)
## AIC: 655.29
##
## Number of Fisher Scoring iterations: 5
Explicación de las métricas
Utilizando el modelo anterior, se realizaran predicciones sobre los datos:
# Métricas de evaluación
predicted_probs <- predict(logistic_model, titanic_data)
confusion_table <- table (predicted_probs, titanic_data$Survived)
precision <- sum(diag(confusion_table))/sum(confusion_table)
#Valores de la matriz de confusión
TP <- confusion_table[1,1]
FN <- confusion_table[1,2]
FP <- confusion_table[2,1]
TN <- confusion_table[2,2]
#Calcular Recall
recall <- TP / (TP + FN)
#Calcular F1-score
f1_score <- 2 * (precision * recall) / (precision + recall)
#Resultados
cat("Precisión del modelo: ", precision)## Precisión del modelo: 0.00140056
## Recall del modelo: 1
## F1_Score del modelo: 0.002797203
Los árboles de decisión son modelos predictivos que utilizan un enfoque basado en reglas para clasificar instancias, se dividen los datos en subconjuntos basados en características específicas.
# Ajustar un árbol de decisión
decision_tree_model <- rpart(Survived ~ Age + Sex + Pclass, data = titanic_data, method = "class")
Visualización
El bosque aleatorio es un método que utiliza múltiples árboles de decisión para mejorar la precisión del modelo; dado que, combina las predicciones de varios árboles para obtener un resultado más robusto.
# Ajustar un modelo de bosque aleatorio
random_forest_model <- randomForest(Survived ~ Age + Sex + Pclass, data = titanic_cleaned_data)
Visualización
##
## Call:
## randomForest(formula = Survived ~ Age + Sex + Pclass, data = titanic_cleaned_data)
## Type of random forest: regression
## Number of trees: 500
## No. of variables tried at each split: 1
##
## Mean of squared residuals: 0.1376161
## % Var explained: 42.94
Las máquinas de soporte vectorial son modelos supervisados que buscan encontrar el hiperplano óptimo que separa diferentes clases en el espacio multidimensional.
Visualización
##
## Call:
## svm(formula = Survived ~ Age + Sex + Pclass, data = titanic_data)
##
##
## Parameters:
## SVM-Type: eps-regression
## SVM-Kernel: radial
## cost: 1
## gamma: 0.25
## epsilon: 0.1
##
##
## Number of Support Vectors: 322
Se han explorado diversas técnicas predictivas y clasificatorias utilizando el conjunto de datos Titanic. Por ello, cada técnica tiene sus propias ventajas y desventajas dependiendo del contexto del problema y los datos disponibles; se menciona que, las métricas de evaluación son fundamentales para determinar la efectividad del modelo implementado.
Los modelos no supervisados son técnicas de aprendizaje automático que se utilizan para encontrar patrones en datos no etiquetados. Uno de los algoritmos más conocidos en esta categoría es el K-Means.
K-Means es un algoritmo de agrupamiento que busca dividir un conjunto de datos en \(k\) grupos (o clústeres) basándose en características similares. Por lo tanto, el objetivo del algoritmo es minimizar la varianza dentro de cada clúster, es decir, maximizar la similitud entre los puntos dentro del mismo clúster y minimizar la similitud entre puntos en diferentes clústeres.
Proceso de K-Means se puede resumir en los siguientes pasos:
# Para mejor comprensión del proceso, se reitera que se debe manejar los valores faltantes(ya se realizo, pero si no es el caso se realiza lo siguiente)
titanic_kmeans_data <- titanic_data %>%
select(Age, Fare) %>%
na.omit()
# Y de la misma manera, escalar los datos
titanic_kmeans_data_scaled <- scale(titanic_kmeans_data)
# Aplicar el algoritmo K-Means
set.seed(123) # Para reproducibilidad
kmeans_result <- kmeans(titanic_kmeans_data_scaled, centers = 3, nstart = 25)
# Agregar los resultados al dataframe original
titanic_kmeans_data$Cluster <- as.factor(kmeans_result$cluster)
# Mostrar los resultados del clustering
head(titanic_kmeans_data)
Visualización
# Gráfico de dispersión con los clústeres identificados
ggplot(titanic_kmeans_data, aes(x = Age, y = Fare, color = Cluster)) +
geom_point(alpha = 0.5) +
labs(title = "Clustering K-Means en el Conjunto de Datos Titanic",
x = "Edad",
y = "Tarifa") +
theme_minimal() +
scale_color_manual(values = c("red", "green", "blue"),
labels = c("Cluster 1", "Cluster 2", "Cluster 3"))El algoritmo K-Means es una técnica poderosa para agrupar datos no etiquetados en clústeres basados en similitudes. En este ejemplo práctico con el conjunto de datos Titanic, se aplico K-Means para identificar grupos de pasajeros según su edad y tarifa, visualizando claramente cómo se agrupan los datos en diferentes clústeres.
La evaluación y validación de modelos son pasos cruciales en el proceso de minería de datos. Estos pasos aseguran que los modelos generados sean precisos y generalizables a nuevos datos.
La división de los datos en conjuntos de entrenamiento, validación y prueba es una práctica estándar en el desarrollo de modelos predictivos:
La validación cruzada es una técnica que permite evaluar la capacidad generalizadora de un modelo dividiendo los datos en múltiples subconjuntos. Por ejemplo, una forma común es la validación cruzada k-fold, donde los datos se dividen en \(k\) grupos (o “folds”). En otras palabras, el modelo se entrena \(k\) veces, cada vez utilizando un fold diferente como conjunto de prueba y los demás como conjunto de entrenamiento.
#Para mejor comprensión del proceso, se reitera que se debe manejar los valores faltantes(ya se realizo, pero si no es el caso se realiza lo siguiente)
titanic_data <- titanic_data %>%
select(Survived, Age, Fare, Pclass, Sex) %>%
mutate(Sex = ifelse(Sex == "male", 1, 0)) %>%
na.omit()
# Definir el control para la validación cruzada
control <- trainControl(method = "cv", number = 10)
# Ajustar un modelo de regresión logística usando validación cruzada
set.seed(123) # Para reproducibilidad
logistic_model_cv <- train(Survived ~ Age + Fare + Pclass + Sex,
data = titanic_data,
method = "glm",
family = "binomial",
trControl = control)
Visualización
## Generalized Linear Model
##
## 714 samples
## 4 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 642, 642, 643, 643, 643, 643, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 0.3804824 0.4033319 0.2907415
En este ejemplo con el conjunto de datos Titanic, se aplico la validación cruzada para evaluar un modelo de regresión logística.