Introducción
En la ciencia de datos, la creación y evaluación de modelos predictivos es una tarea fundamental. R con tidymodels (o caret) y Python con scikit-learn. Este tutorial proporciona ejemplos paralelos utilizando el conocido conjunto de datos del iris para comparar cómo aborda cada lenguaje el entrenamiento, la evaluación y la predicción de modelos. Al final, comprenderá las similitudes y diferencias entre estos flujos de trabajo, lo que le ayudará a elegir el mejor conjunto de herramientas para sus proyectos.
Ejemplo comparativo: Entrenamiento de un modelo de clasificación en el conjunto de datos Iris
Dividiremos el conjunto de datos del iris en conjuntos de entrenamiento y de prueba, entrenaremos un modelo de regresión logística en cada lenguaje y, a continuación, evaluaremos su rendimiento.
#| label: r-tidymodels
# Cargar librerías requeridas
library(tidymodels)
# Cargar el conjunto de datos del iris
data(iris)
# Dividir los datos en conjuntos de entrenamiento y prueba
set.seed(123)
<- initial_split(iris, prop = 0.8)
iris_split <- training(iris_split)
iris_train <- testing(iris_split)
iris_test
# Definir la especificación de un modelo de regresión logística para la clasificación multiclase
<- multinom_reg() %>%
model_spec set_engine("nnet") %>%
set_mode("classification")
# Cree un flujo de trabajo y añada el modelo y la fórmula
<- workflow() %>%
iris_workflow add_model(model_spec) %>%
add_formula(Species ~ .)
# Ajuste del modelo
<- fit(iris_workflow, data = iris_train)
iris_fit
# Hacer predicciones en el conjunto de prueba
<- predict(iris_fit, new_data = iris_test) %>%
iris_pred bind_cols(iris_test)
# Evaluar el rendimiento del modelo
<- iris_pred %>% metrics(truth = Species, estimate = .pred_class)
metrics print(metrics)
Resultados:
.metric .estimator .estimate
<chr> <chr> <dbl>
1 accuracy multiclass 0.967
2 kap multiclass 0.946
#| label: python-scikit-learn
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
# Cargar el conjunto de datos del iris
= load_iris()
iris = pd.DataFrame(iris.data, columns=iris.feature_names)
df 'Species'] = iris.target
df[
# Divida el conjunto de datos en conjuntos de entrenamiento y de prueba
= df.drop('Species', axis=1)
X = df['Species']
y = train_test_split(X, y, test_size=0.2, random_state=123)
X_train, X_test, y_train, y_test
# Inicializar y ajustar un modelo de regresión logística
= LogisticRegression(max_iter=200)
model
model.fit(X_train, y_train)
# Hacer predicciones en el conjunto de prueba
= model.predict(X_test)
pred
# Evaluar el rendimiento del modelo
= accuracy_score(y_test, pred)
accuracy print("Accuracy:", accuracy)
print("Classification Report:")
print(classification_report(y_test, pred))
Resultados:
precision recall f1-score support
0 1.00 1.00 1.00 13
1 1.00 1.00 1.00 6
2 1.00 1.00 1.00 11
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30
La columna de soporte indica el número de instancias verdaderas (u observaciones reales) de cada clase en el conjunto de prueba. Le indica cuántas muestras pertenecen a cada clase, lo que resulta útil para comprender la distribución de las clases en su conjunto de datos.
Discusión
Comparación de flujos de trabajo
División de datos:
Ambos ejemplos dividen el conjunto de datos del iris en conjuntos de entrenamiento y prueba utilizando enfoques de semillas aleatorias similares.Entrenamiento del modelo:
- R (tidymodels): Utiliza un flujo de trabajo que integra la especificación de modelos y el modelado basado en fórmulas.
- Python (scikit-learn): Implementa un enfoque más imperativo, ajustando directamente un modelo de regresión logística.
- R (tidymodels): Utiliza un flujo de trabajo que integra la especificación de modelos y el modelado basado en fórmulas.
Evaluación:
Ambos métodos evalúan el rendimiento del modelo, aunque las métricas y los formatos de salida difieren. El enfoque de tidymodels aprovecha una sintaxis ordenada y fácil de usar, mientras que scikit-learn proporciona funciones integradas para obtener informes de precisión y clasificación detallada.
Puntos fuertes de cada enfoque
tidymodels (R):
Ofrece un flujo de trabajo altamente modular y coherente que se integra a la perfección con otras herramientas tidyverse, lo que facilita su ampliación y personalización.scikit-learn (Python):
Proporciona una interfaz sencilla y ampliamente adoptada con un sólido soporte para una gran variedad de algoritmos de aprendizaje automático y herramientas de preprocesamiento.
Conclusión
Esta comparación demuestra que tanto tidymodels en R como scikit-learn en Python ofrecen potentes flujos de trabajo para crear y evaluar modelos de aprendizaje automático. Al comprender los matices de cada enfoque, puede seleccionar el entorno que mejor se adapte a sus necesidades de ciencia de datos, o incluso combinarlos para aprovechar los puntos fuertes de ambos.
Lecturas adicionales
- Python para usuarios de R: transición a Python para la ciencia de datos
- Manipulación de datos en Python frente a R: dplyr frente a pandas
- Sintaxis de R frente a sintaxis de Python: guía comparativa
Feliz codificación y disfrute explorando flujos de trabajo de aprendizaje automático tanto en R como en Python!
Explorar más artículos
Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.
Reutilización
Cómo citar
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Flujos de trabajo de aprendizaje automático: tidymodels
frente a scikit-learn},
date = {2024-02-13},
url = {https://www.datanovia.com/es/learn/programming/transition/machine-learning-workflows.html},
langid = {es}
}