Flujos de trabajo de aprendizaje automático: tidymodels frente a scikit-learn

Comparación de la formación, evaluación y predicción de modelos de ML en R y Python

Compara los flujos de trabajo de aprendizaje automático en R y Python examinando tidymodels en R frente a scikit-learn en Python. Este tutorial proporciona ejemplos paralelos de formación, evaluación y predicción de modelos utilizando el conjunto de datos del iris, destacando las principales diferencias y puntos fuertes de cada ecosistema.

Programación
Autor/a
Afiliación
Fecha de publicación

13 de febrero de 2024

Fecha de modificación

9 de mayo de 2025

Palabras clave

tidymodels frente a scikit-learn, Aprendizaje automático en R y Python, caret vs scikit-learn, flujos de trabajo de ML de ciencia de datos, Aprendizaje automático en Python y R

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)
iris_split <- initial_split(iris, prop = 0.8)
iris_train <- training(iris_split)
iris_test <- testing(iris_split)

# Definir la especificación de un modelo de regresión logística para la clasificación multiclase
model_spec <- multinom_reg() %>% 
  set_engine("nnet") %>% 
  set_mode("classification")

# Cree un flujo de trabajo y añada el modelo y la fórmula
iris_workflow <- workflow() %>% 
  add_model(model_spec) %>% 
  add_formula(Species ~ .)

# Ajuste del modelo
iris_fit <- fit(iris_workflow, data = iris_train)

# Hacer predicciones en el conjunto de prueba
iris_pred <- predict(iris_fit, new_data = iris_test) %>% 
  bind_cols(iris_test)

# Evaluar el rendimiento del modelo
metrics <- iris_pred %>% metrics(truth = Species, estimate = .pred_class)
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
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['Species'] = iris.target

# Divida el conjunto de datos en conjuntos de entrenamiento y de prueba
X = df.drop('Species', axis=1)
y = df['Species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

# Inicializar y ajustar un modelo de regresión logística
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# Hacer predicciones en el conjunto de prueba
pred = model.predict(X_test)

# Evaluar el rendimiento del modelo
accuracy = accuracy_score(y_test, pred)
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
Nota

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.
  • 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

Feliz codificación y disfrute explorando flujos de trabajo de aprendizaje automático tanto en R como en Python!

Explorar más artículos

Nota

Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.

placeholder

placeholder
No hay resultados
Volver arriba

Reutilización

Cómo citar

BibTeX
@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}
}
Por favor, cita este trabajo como:
Kassambara, Alboukadel. 2024. “Flujos de trabajo de aprendizaje automático: tidymodels frente a scikit-learn.” February 13, 2024. https://www.datanovia.com/es/learn/programming/transition/machine-learning-workflows.html.