Fluxos de trabalho de aprendizado de máquina: tidymodels vs. scikit-learn

Comparando o treinamento, a avaliação e a previsão de modelos de ML em R e Python

Compare os fluxos de trabalho de aprendizado de máquina em R e Python examinando tidymodels em R versus scikit-learn em Python. Este tutorial fornece exemplos lado a lado para treinamento, avaliação e previsão de modelos usando o conjunto de dados iris, destacando as principais diferenças e pontos fortes de cada ecossistema.

Programação
Autor
Afiliação
Data de Publicação

13 de fevereiro de 2024

Data de Modificação

29 de abril de 2025

Palavras-chave

tidymodels vs scikit-learn, aprendizado de máquina em R e Python, caret vs scikit-learn, Fluxos de trabalho de ML em ciência de dados, Python vs R machine learning

Introdução

Na ciência de dados, construir e avaliar modelos preditivos é uma tarefa essencial. Tanto o R quanto o Python oferecem ecossistemas robustos para aprendizado de máquina — o R com tidymodels (ou caret) e o Python com scikit-learn. Este tutorial fornece exemplos lado a lado usando o conhecido conjunto de dados iris para comparar como cada linguagem aborda o treinamento, a avaliação e a previsão de modelos. Ao final, você entenderá as semelhanças e diferenças entre esses fluxos de trabalho, o que o ajudará a escolher o melhor conjunto de ferramentas para seus projetos.



Exemplo comparativo: treinando um modelo de classificação no conjunto de dados Iris

Dividiremos o conjunto de dados iris em conjuntos de treinamento e teste, treinaremos um modelo de regressão logística em cada linguagem e, em seguida, avaliaremos seu desempenho.

#| label: r-tidymodels
# Carregar bibliotecas necessárias
library(tidymodels)

# Carregar o conjunto de dados iris
data(iris)

# Divida os dados em conjuntos de treinamento e teste
set.seed(123)
iris_split <- initial_split(iris, prop = 0.8)
iris_train <- training(iris_split)
iris_test <- testing(iris_split)

# Defina uma especificação de modelo de regressão logística para classificação multiclasse
model_spec <- multinom_reg() %>% 
  set_engine("nnet") %>% 
  set_mode("classification")

# Crie um fluxo de trabalho e adicione o modelo e a fórmula
iris_workflow <- workflow() %>% 
  add_model(model_spec) %>% 
  add_formula(Species ~ .)

# Ajustar o modelo
iris_fit <- fit(iris_workflow, data = iris_train)

# Faça previsões no conjunto de testes
iris_pred <- predict(iris_fit, new_data = iris_test) %>% 
  bind_cols(iris_test)

# Avalie o desempenho do 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

# Carregar o conjunto de dados iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['Species'] = iris.target

# Divida o conjunto de dados em conjuntos de treinamento e teste
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)

# Inicialize e ajuste um modelo de regressão logística
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# Faça previsões no conjunto de testes
pred = model.predict(X_test)

# Avalie o desempenho do 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

A coluna de suporte indica o número de instâncias verdadeiras (ou observações reais) de cada classe no conjunto de testes. Ele informa quantas amostras pertencem a cada classe, o que é útil para entender a distribuição das classes em seu conjunto de dados.

Discussão

Comparação de fluxos de trabalho

  • Divisão de dados:
    Ambos os exemplos dividem o conjunto de dados iris em conjuntos de treinamento e teste usando abordagens semelhantes de sementes aleatórias.

  • Treinamento do modelo:

    • R (tidymodels): Usa um fluxo de trabalho que integra a especificação do modelo e a modelagem baseada em fórmulas.
    • Python (scikit-learn): Implementa uma abordagem mais imperativa, ajustando diretamente um modelo de regressão logística.
  • Avaliação:
    Ambos os métodos avaliam o desempenho do modelo, embora as métricas e os formatos de saída sejam diferentes. A abordagem tidymodels aproveita uma sintaxe organizada e fácil de usar, enquanto o scikit-learn fornece funções integradas para relatórios detalhados de classificação e precisão.

Pontos fortes de cada abordagem

  • tidymodels (R):
    Oferece um fluxo de trabalho altamente modular e consistente que se integra perfeitamente a outras ferramentas tidyverse, facilitando a extensão e a personalização.

  • scikit-learn (Python):
    Oferece uma interface simples e amplamente adotada, com suporte robusto para uma variedade de algoritmos de aprendizado de máquina e ferramentas de pré-processamento.

Conclusão

Esta comparação lado a lado demonstra que tanto o tidymodels em R quanto o scikit-learn em Python oferecem fluxos de trabalho poderosos para construir e avaliar modelos de aprendizado de máquina. Ao compreender as nuances de cada abordagem, você pode selecionar o ambiente que melhor se alinha às suas necessidades de ciência de dados ou até mesmo combiná-los para aproveitar os pontos fortes de ambos.

Leitura adicional

Boa programação e aproveite a exploração dos fluxos de trabalho de aprendizado de máquina em R e Python!

Explore mais artigos

Nota

Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.

placeholder

placeholder
Nenhum item correspondente
De volta ao topo

Reuso

Citação

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Fluxos de trabalho de aprendizado de máquina: tidymodels vs.
    scikit-learn},
  date = {2024-02-13},
  url = {https://www.datanovia.com/pt/learn/programming/transition/machine-learning-workflows.html},
  langid = {pt}
}
Por favor, cite este trabalho como:
Kassambara, Alboukadel. 2024. “Fluxos de trabalho de aprendizado de máquina: tidymodels vs. scikit-learn.” February 13, 2024. https://www.datanovia.com/pt/learn/programming/transition/machine-learning-workflows.html.