Aprendizaje automático básico en R: un tutorial (2023)
Introducción
Introducción al Aprendizaje Automático en R
El aprendizaje automático se ha establecido firmemente en el conjunto de herramientas de cualquier científico de datos, y R, con su rico ecosistema de paquetes, es un excelente lenguaje para aprovechar su poder. Comenzar con R me pareció una gran manera de sumergirme en los conceptos de aprendizaje automático sin sentirme abrumado por las complejidades de la programación.
Primero, es crucial entender qué es realmente el aprendizaje automático. Incluye algoritmos que permiten que las computadoras aprendan de los datos y hagan predicciones. Esto puede ir desde predecir los precios de las casas hasta determinar si un correo es spam.
Ahora, vamos a ensuciarnos las manos con algunos datos. Una de las mayores ventajas de R es la abundancia de conjuntos de datos disponibles para experimentar. El conjunto de datos iris
, un clásico en los ejemplos de aprendizaje automático, está integrado y listo para usar. Contiene mediciones de diferentes especies de flores de iris.
Aquí se muestra cómo cargarlo y echar un vistazo rápido:
data(iris)
head(iris)
La función head
nos permite ver las primeras filas del conjunto de datos. Siempre es una buena práctica familiarizarnos con el formato y la estructura de los datos antes de avanzar.
Entonces, ¿qué sigue después de cargar los datos? Graficar y entender las relaciones dentro de ellos. La función pairs
en R nos da una manera fácil de visualizar los datos en pares, lo que puede ofrecer una visión de las correlaciones entre las características.
pairs(iris[1:4], main = "Datos Iris", pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
En el aprendizaje automático, es primordial elegir el modelo adecuado. Hay una variedad de modelos disponibles, pero un buen punto de partida para problemas de clasificación es el algoritmo de k-vecinos más cercanos (KNN). Es intuitivo y sencillo, lo que lo convierte en un excelente punto de partida.
El código para entrenar y probar un modelo KNN sería algo como esto:
library(class)
# Dividimos los datos en un conjunto de entrenamiento y otro de prueba
indexes sample(1:nrow(iris), nrow(iris) * 0.7)
train_data iris[indexes,]
test_data iris[-indexes,]
train_label iris[indexes, 5]
test_label iris[-indexes, 5]
# Aplicamos el algoritmo knn
knn_pred knn(train = train_data[,1:4], test = test_data[,1:4], cl = train_label, k=5)
# Ahora podemos imprimir las predicciones
print(knn_pred)
Antes de ejecutar este código, necesitas dividir tus conjuntos de datos en entrenamiento y prueba, un proceso que me recuerda a un chef dividiendo cuidadosamente los ingredientes para la receta perfecta. La función sample
es genial para crear índices aleatorios que se usan en la división de datos. Recuerda, probar con datos separados es clave para saber si nuestro modelo realmente ha aprendido algo o solo ha memorizado los datos de entrenamiento.
Por último, déjame darte un consejo: empieza con modelos simples y aumenta la complejidad según sea necesario. La tentación es aferrarse a los algoritmos más nuevos y brillantes, pero a menudo los modelos simples te sorprenderán con su efectividad, y además son más fáciles de entender y explicar.
A medida que avances con el tutorial, verás que iterar en un modelo, interpretar resultados y luego mejorarlo es un proceso cíclico. Un practicante de aprendizaje automático siempre está buscando formas de sacar más rendimiento de sus modelos. Después de establecer una base con KNN u otro algoritmo simple, aprenderás a usar otros algoritmos, ajustar tus modelos, trabajar con diferentes tipos de datos e incluso adentrarte en temas más avanzados de aprendizaje automático.
Entender e implementar modelos de aprendizaje automático en R es una tarea gratificante—una que no solo he encontrado intelectualmente estimulante, sino también inmensamente práctica, y estoy seguro de que tú también lo harás.
Configuración de tu entorno R
Antes de adentrarnos en los detalles de aprendizaje automático con R, es importante tener tu entorno de R listo. Para aquellos que pueden ser nuevos en R, es un lenguaje de programación de código abierto excelente para el análisis de datos, visualizaciones y, sí, también para el aprendizaje automático. Entiendo que la parte de configuración no es lo más emocionante, ¡pero te prometo que tener un entorno de trabajo bien organizado hace la vida mucho más fácil a largo plazo! Y bien, lo haremos juntos.
Primero, deberás descargar R desde CRAN, la Red de Archivos Completos de R. Escoge la versión compatible con tu sistema operativo. Así es como lo hago yo, copia y pega estas líneas en la barra de direcciones de tu navegador, sustituyendo ‘mac’ con ‘win’ o ‘linux’ si lo necesitas:
https://cran.r-project.org/bin/macosx/
Una vez que tengas R instalado, te recomiendo encarecidamente que uses RStudio como tu IDE (Entorno de Desarrollo Integrado). Es muy fácil de usar y mejora significativamente la interfaz de R, haciendo que tu experiencia de programación sea mucho más agradable. Descarga la versión adecuada de RStudio desde aquí:
https://www.rstudio.com/products/rstudio/download/
Después de la instalación, abre RStudio. Un consejo: RStudio tiene paneles con múltiples propósitos - presta atención al panel Console, ya que ahí es donde verás el resultado de tus ejecuciones de código. Ahora, para probar si R está listo, suelo ejecutar un comando simple para verificar. Hagámoslo juntos:
# Comprobar la versión de R
R.version.string
Deberías ver la versión de R impresa en la consola, confirmando que R está listo para trabajar.
Lo siguiente es configurar los paquetes necesarios. Piensa en los paquetes como herramientas adicionales que R puede usar; para el aprendizaje automático, necesitarás herramientas como caret o tidymodels. Instálalos usando la función install.packages()
. Es tan fácil como esto:
# Instalar caret o tidymodels
install.packages("caret")
install.packages("tidymodels")
Una vez instalados, asegúrate de que estén listos para usar con:
# Cargar las librerías
library(caret)
library(tidymodels)
Ahora, para mantener organizados nuestros proyectos, crearemos un nuevo proyecto dentro de RStudio—un paso esencial para mantener la cordura cuando los proyectos se vuelven más complejos.
# En RStudio, ve a:
# File New Project New Directory New Project
# Introduce el nombre de tu proyecto y elige un directorio para alojarlo.
Esto creará un nuevo espacio de trabajo con su propio guion, espacio de trabajo e historial - una hoja en blanco.
Por último, pero no menos importante, veamos el control de versiones. Si no estás familiarizado, piensa en el control de versiones como una máquina del tiempo para tu código. Usaremos Git, que se integra perfectamente en RStudio. Configúralo en RStudio y conéctalo a un repositorio de GitHub o un servicio similar. Esto te permite seguir los cambios y colaborar fácilmente. Aquí está cómo inicializar un repositorio de Git para el control de versiones dentro de tu proyecto de RStudio:
# En RStudio, ve a:
# Tools Version Control Project Setup
# Elige ‘Git’ y sigue las instrucciones para inicializar un repositorio.
Y ahí lo tienes. Tu entorno de R está listo con todos los fundamentos establecidos. Hemos instalado R, decidido sobre un IDE, agregado los paquetes necesarios, organizado nuestro espacio de trabajo con un nuevo proyecto e introducido el control de versiones. No es ciencia espacial y ya lo tienes dominado. Ahora estás preparado para sumergirte en la creación de ese primer modelo de aprendizaje automático, sin contratiempos, eso espero. ¡Arremángate y vamos a la parte divertida!
Tu Primer Modelo de Aprendizaje Automático en R
Crear tu primer modelo de machine learning en R puede ser una gran aventura. Recuerdo la primera vez que me adentré en el mundo del machine learning; fue emocionante ver cómo mi máquina interpretaba datos y hacía predicciones. Ahora, te guiaré por este proceso paso a paso.
Primero, asegúrate de tener instalados los paquetes necesarios. Necesitarás caret
, que significa 'Clasificación y REgresión en Entrenamiento'. Este paquete facilita el proceso de entrenamiento de modelos para problemas complejos de regresión y clasificación.
install.packages("caret")
library(caret)
Supongamos que estamos trabajando con el famoso conjunto de datos de Iris. Este es un tesoro para principiantes porque es relativamente simple y ampliamente conocido. El conjunto de datos incluye diversas medidas de flores de iris y sus especies. El objetivo suele ser predecir la especie a partir de las medidas.
Carga el conjunto de datos, que viene por defecto con R:
data(iris)
Antes de lanzar nuestros datos a un modelo, échale un vistazo con summary(iris)
para entender con qué estás trabajando.
Ahora, dividamos este conjunto de datos en dos partes: una para entrenar el modelo y otra para probarlo. Una división común es 70% para entrenamiento y 30% para pruebas. La función createDataPartition()
de caret
puede ayudarte con eso.
set.seed(123) # para reproducibilidad
trainIndex createDataPartition(iris$Species, p = 0.7, list = FALSE)
trainData iris[trainIndex, ]
testData iris[-trainIndex, ]
Cuando construí mi primer modelo, lo hice simple con un análisis discriminante lineal (LDA). Es una técnica básica para problemas de clasificación.
Vamos a entrenar un modelo LDA usando trainData
.
ldaModel train(Species~., data=trainData, method='lda')
La fórmula Species~.
indica a R que prediga la especie usando todas las otras columnas en trainData
. El method='lda'
especifica el tipo de modelo.
Una vez entrenado el modelo, es hora de hacer predicciones en testData
y ver cómo se desempeña el modelo.
predictions predict(ldaModel, testData)
Verifica qué tan bien funcionó tu modelo. La mayoría de los principiantes, como yo, empiezan revisando la matriz de confusión. Es una forma intuitiva de ver dónde tu modelo está acertando o fallando.
confusionMatrix(predictions, testData$Species)
Estos resultados te pueden mostrar cuántas predicciones fueron correctas y dónde puede haberse equivocado el modelo.
Recuerda, el objetivo de este primer modelo no es romper récords, sino sentar las bases para entender, iterar y mejorar. Me tomó varios intentos entender los matices e incluso más para refinar y elegir modelos más complejos y parámetros de ajuste. La belleza de caret
y R radica en la facilidad con que puedes explorar estos aspectos una vez que comprendes lo básico.
¡Y eso es todo! Acabas de construir y evaluar tu primer modelo de machine learning en R. Claro, a medida que te adentras más, aprenderás sobre validación cruzada, ajuste de hiperparámetros y otros algoritmos. Pero por ahora, date una palmadita en la espalda, has dado el primer gran paso en el mundo del machine learning en R.
Evaluación del Rendimiento del Modelo
A medida que paso de entrenar un modelo a entender qué tan bien es probable que funcione en el mundo real, evaluar su rendimiento se vuelve crucial. Esto va más allá de simplemente tener un modelo funcionando; se trata de asegurarse de que el modelo que hemos creado realmente haga buenas predicciones.
Para comenzar, necesitamos considerar métricas de evaluación. Hay diferentes métricas para diferentes tipos de problemas. Por ejemplo, la precisión es una medida típica para problemas de clasificación. Sin embargo, para un problema de regresión, podríamos ver el error cuadrático medio (MSE) o el error absoluto medio (MAE). Supongamos que he construido un modelo de clasificación. Así es como calcularía la precisión en R:
# Asumiendo 'pred' son tus predicciones y 'actual' son las etiquetas verdaderas
accuracy sum(pred == actual) / length(actual)
print(paste("Precisión:", accuracy))
Eso es un comienzo, pero la precisión no siempre es la mejor medida, especialmente si mis clases están desbalanceadas. En tales casos, una matriz de confusión me ayuda a ver dónde el modelo lo está haciendo bien o mal:
library(caret)
confusionMatrix(as.factor(pred), as.factor(actual))
El paquete caret
proporciona una función confusionMatrix útil que da no solo la matriz, sino también otras métricas útiles como sensibilidad y especificidad.
Ahora, supongamos que estoy trabajando con un modelo de regresión. Para obtener el MSE o MAE, es un poco diferente:
mse mean((pred - actual)^2)
mae mean(abs(pred - actual))
print(paste("Error Cuadrático Medio:", mse))
print(paste("Error Absoluto Medio:", mae))
No podemos mirar estas métricas en aislamiento. A veces ayuda visualizar los errores. Digamos que quiero ver cómo se distribuyen los errores. Un gráfico rápido de valores actuales vs. predichos puede ser esclarecedor:
library(ggplot2)
ggplot() +
geom_point(aes(x=actual, y=pred), color="blue") +
geom_abline(intercept=0, slope=1, color="red") +
ggtitle("Actual vs. Predicho")
Esa línea roja representa donde estarían los puntos si mis predicciones fueran perfectas. Las desviaciones de esa línea me muestran los errores.
Un aspecto importante de evaluar el rendimiento del modelo es la validación cruzada. No quiero cometer el error de solo evaluar el modelo en los datos que usé para entrenarlo. Eso podría hacerme pensar que mi modelo está funcionando mejor de lo que realmente está. Entonces, uso la función train del paquete caret
y especifico mi método de validación cruzada:
control trainControl(method="cv", number=10) # validación cruzada de 10 pliegues
model_cv train(target~., data=train_data, method="lm", trControl=control)
print(model_cv)
El parámetro trControl
me permite especificar que quiero usar una validación cruzada de 10 pliegues, que es un buen equilibrio la mayoría de las veces.
Pero antes de lanzarte a usar estas técnicas, recuerda, cada conjunto de datos y problema es único—no hay una mejor manera de evaluación universal. Lo importante es entender el porqué detrás de cada métrica y qué me dice sobre mi modelo en el contexto específico en el que se está aplicando.
Evaluar el rendimiento del modelo no es solo una revisión puntual; es un proceso iterativo. Cada vez que ajusto mi modelo, paso por estos pasos nuevamente para ver si los cambios son realmente mejoras. Así es como afino gradualmente las habilidades predictivas de mi modelo, siempre con un ojo en las métricas que más importan para los objetivos de mi proyecto.
Mejorar su Modelo y Próximos Pasos
En el camino de aprender machine learning con R, construir un modelo es solo el comienzo. He aprendido que refinar el modelo y mejorarlo es donde se hace verdadero progreso. Después de evaluar el rendimiento inicial de nuestro modelo, está claro que siempre hay espacio para mejorar.
Un método que encuentro efectivo es ajustar los hiperparámetros. Los hiperparámetros son configuraciones que se pueden ajustar para controlar el comportamiento de un algoritmo de machine learning. En R, puedes usar el paquete caret para esto. Aquí te muestro un ejemplo donde usaré la función train() para ajustar un modelo de random forest:
library(caret)
# Asumimos que tenemos un conjunto de datos llamado 'training' y 'target_variable'
set.seed(123)
tuneGrid expand.grid(.mtry = seq(2, 14, by = 2))
control trainControl(method = "repeatedcv", number = 10, repeats = 3)
tunedModel train(target_variable ~ ., data = training,
method = "rf",
metric = "Accuracy",
tuneGrid = tuneGrid,
trControl = control)
summary(tunedModel) # Proporciona un resumen del modelo ajustado
Jugando con el número de variables seleccionadas en cada división (mtry), el rendimiento del modelo puede a menudo mejorar. La función trainControl() configura el método para validación cruzada, ayudando a evitar overfitting.
Otro aspecto que considero crucial es la ingeniería de características. Se trata de crear nuevas características de entrada a partir de las que ya tienes, y puede hacer una gran diferencia. Por ejemplo, combinar dos variables para crear una nueva que brinde información más clara puede aumentar la precisión del modelo. Para implementar esto, podría agregar una nueva columna a nuestro marco de datos:
training$interactionFeature training$feature1 * training$feature2
Luego, podrías incluir esta nueva característica en el proceso de entrenamiento de tu modelo.
Es importante mantenerse actualizado con las últimas investigaciones y tendencias en machine learning. Regularmente reviso recursos de universidades y destacados investigadores. Por ejemplo, el curso de Machine Learning de Stanford por Andrew Ng en Coursera es imprescindible. Repositorios de GitHub como tidymodels ofrecen una rica suite de paquetes que hacen el machine learning en R más ordenado y claro. Puedes encontrarlo aquí: https://github.com/tidymodels.
También creo en el valor de compartir y aprender de los demás. Comunidades como GitHub, Stack Overflow, r/machinelearning en Reddit y Hacker News de YCombinator son excelentes para colaborar y obtener retroalimentación. No dudes en mostrar tu trabajo y pedir consejos.
Finalmente, documentar el progreso es clave. Toma notas y escribe códigos mientras experimentas con diferentes modelos. Esto no solo ayuda a llevar un registro de lo que has hecho, sino que también facilita el aprendizaje de los errores. Aquí tienes un ejemplo de cómo podría verse una documentación simple:
# Este bloque de código es para un modelo simple de regresión lineal
# Conjunto de datos: mtcars
# Fecha: YYYY-MM-DD
# Objetivos: Predecir millas por galón (mpg) a partir de un conjunto de variables
linearMod lm(mpg ~ wt + qsec + factor(am), data = mtcars)
summary(linearMod) # Presenta el resumen de nuestro modelo de regresión
En resumen, el camino para mejorar tu modelo en R está lleno de muchos pasos pequeños pero significativos. El ajuste de hiperparámetros, ingeniería de características, mantenerse informado, colaborar y documentar – todos estos aspectos se combinan para mejorar tus capacidades de machine learning. Trátalo como un ciclo continuo: construir, probar, aprender e iterar. El paisaje de machine learning evoluciona rápidamente, y así deben hacerlo tus métodos y modelos.
Compartir