Pular para o conteúdo principal

O que é Bagging no aprendizado de máquina? Um guia com exemplos

Este tutorial apresentou uma visão geral do método de ensemble de ensacamento no aprendizado de máquina, incluindo como ele funciona, a implementação em Python, a comparação com o reforço, as vantagens e as práticas recomendadas.
Atualizado 16 de jan. de 2025  · 10 min lido

Explorar com IA

Abrir no ChatGPTAbrir no ClaudeAbrir no Perplexity

Os métodos de conjunto são técnicas poderosas de aprendizado de máquina que combinam vários modelos para melhorar a precisão geral da previsão e a estabilidade do modelo. O Bootstrap Aggregating, mais conhecido como Bagging, destaca-se como um método de conjunto popular e amplamente implementado.

Neste tutorial, vamos nos aprofundar no uso de sacos, como ele funciona e onde ele se destaca. Vamos compará-lo com outro método de conjunto (Boosting) e analisar um exemplo de ensacamento em Python. Ao final, você terá uma sólida compreensão do ensacamento, inclusive das práticas recomendadas.

Entendendo a aprendizagem de conjuntos

A modelagem de conjunto é uma técnica que combina vários modelos de aprendizado de máquina para melhorar o desempenho preditivo geral. A ideia básica é que um grupo de alunos fracos pode se unir para formar um aluno forte.

Em geral, um modelo de conjunto consiste em duas etapas:

  1. Vários modelos de aprendizado de máquina são treinados de forma independente.
  2. Suas previsões são agregadas de alguma forma, como votação, média ou ponderação. Esse conjunto é então usado para fazer a previsão geral.

Imagem do autor

Os conjuntos tendem a produzir melhores resultados porque os diferentes modelos se complementam e superam seus pontos fracos individuais. Eles também reduzem a variação e evitam o ajuste excessivo.

Alguns métodos de conjunto populares são ensacamento, aumento e empilhamento. O aprendizado em conjunto é amplamente usado em tarefas de aprendizado de máquina, como classificação, regressão e agrupamento, para aumentar a precisão e a robustez.

O que é ensacamento?

Bagging (agregação bootstrap) é um método de conjunto que envolve o treinamento de vários modelos independentemente em subconjuntos aleatórios dos dados e a agregação de suas previsões por meio de votação ou média.

Imagem do autor

Em detalhes, cada modelo é treinado em um subconjunto aleatório dos dados amostrados com substituição, o que significa que os pontos de dados individuais podem ser escolhidos mais de uma vez. Esse subconjunto aleatório é conhecido como amostra bootstrap. Ao treinar modelos em diferentes bootstraps, o bagging reduz a variação dos modelos individuais. Ele também evita o ajuste excessivo, expondo os modelos constituintes a diferentes partes do conjunto de dados.

As previsões de todos os modelos amostrados são então combinadas por meio de uma média simples para fazer a previsão geral. Dessa forma, o modelo agregado incorpora os pontos fortes dos modelos individuais e cancela seus erros.

O ensacamento é particularmente eficaz para reduzir a variação e o excesso de ajuste, tornando o modelo mais robusto e preciso, especialmente nos casos em que os modelos individuais são propensos a alta variabilidade.

Ensacamento Vs. Impulsionamento

O Boosting é outro método de conjunto popular que é frequentemente comparado ao Bagging. A principal diferença está em como os modelos constituintes são treinados.

No bagging, os modelos são treinados de forma independente e paralela em diferentes subconjuntos aleatórios dos dados. Já no boosting, os modelos são treinados sequencialmente, com cada modelo aprendendo com os erros do modelo anterior. Além disso, o ensacamento normalmente envolve a média simples de modelos, enquanto o aumento atribui pesos com base na precisão.

Imagem do autor

O bagging reduz a variação, enquanto o boosting reduz a tendência. O Bagging pode ser usado com modelos instáveis, como árvores de decisão, enquanto o boosting funciona melhor com modelos estáveis, como regressão linear.

Ambos os métodos têm seus pontos fortes e fracos. O bagging é mais simples de ser executado em paralelo, enquanto o boosting pode ser mais eficiente e preciso. Na prática, é útil testar ambos em um novo problema para ver qual apresenta melhor desempenho.

Vantagens do ensacamento

Aqui estão algumas das principais vantagens do ensacamento:

  1. Reduz o ajuste excessivo: Ele pode reduzir a chance de um modelo superajustado, resultando em maior precisão do modelo em dados não vistos.
  2. Diminui a carência de modelos: Vários modelos treinados em diferentes subconjuntos de dados fazem a média de suas previsões, levando a uma variação menor do que a de um único modelo.
  3. Melhora a estabilidade: As alterações no conjunto de dados de treinamento têm menos impacto sobre os modelos ensacados, tornando o modelo geral mais estável.
  4. Lida com alta variabilidade: Especialmente eficaz para algoritmos como árvores de decisão, que tendem a ter alta variação.
  5. Computação paralelizável: Cada modelo do conjunto pode ser treinado de forma independente, permitindo o processamento paralelo e o uso eficiente dos recursos computacionais.
  6. Fácil de entender e implementar: O conceito por trás do bagging é simples e pode ser implementado sem modificações complexas no algoritmo de aprendizado.
  7. Bom com dados ruidosos: O processo de cálculo da média ajuda a reduzir o ruído na previsão final.
  8. Lida com dados desequilibrados: O ensacamento pode ajudar em cenários em que o conjunto de dados é desequilibrado, melhorando o desempenho do modelo em tais situações.

Bagging em Python: Um breve tutorial

Neste tutorial em Python, treinaremos um modelo de classificação de árvore de decisão no conjunto de dados de rotatividade de clientes de telecomunicações e usaremos o método de ensemble de ensemble para melhorar o desempenho. Usaremos o DataLab para obter o conjunto de dados e executar nosso código. O código também está disponível nesta pasta de trabalho do DataLab, que você pode copiar para executar no navegador sem instalar nada.

Conjunto de dados

O conjunto de dados sobre a rotatividade de clientes de telecomunicações vem de uma empresa de telecomunicações iraniana. Cada linha do conjunto de dados corresponde à atividade de um cliente ao longo de um ano, incluindo informações sobre falhas de chamadas, duração da assinatura e um rótulo de rotatividade que indica se o cliente abandonou o serviço.

Primeiro, carregaremos o conjunto de dados e visualizaremos as 5 primeiras linhas.

import pandas as pd

customer = pd.read_csv("data/customer_churn.csv")
customer.head()

Exibindo o conjunto de dados

Depois disso, criaremos variáveis independentes (X) e dependentes (y). Em seguida, dividiremos o conjunto de dados em subconjuntos de treinamento e de teste.

X = customer.drop("Churn", axis=1)
y = customer.Churn

# Split into train and test 
from sklearn.model_selection import train_test_split, cross_val_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

Treinar um modelo de aprendizado de máquina

Criaremos um pipeline simples de aprendizado de máquina e ajustaremos um conjunto de dados de treinamento a ele. O pipeline normalizará os dados antes de alimentar as entradas do classificador de árvore de decisão.

from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', DecisionTreeClassifier(random_state=42))
])

pipeline.fit(X_train, y_train)

Diagrama do pipeline 1

Faça o curso Aprendizado de máquina com modelos baseados em árvores em Python para saber como usar modelos baseados em árvores e conjuntos para regressão e classificação com o scikit-learn.

Avaliação do modelo

Avaliaremos um modelo de árvore de decisão para que possamos compará-lo com o modelo de conjunto.

Geraremos relatórios de classificação fazendo previsões em uma planilha de dados de teste.

from sklearn.metrics import classification_report

# Make prediction on the testing data
y_pred = pipeline.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

Nosso modelo alcançou 96% de precisão e 97% de recuperação na classe majoritária "0", mas teve um desempenho ruim na classe minoritária "1".

Resultados do desempenho do modelo

Para entender melhor o desempenho do modelo, faremos uma validação cruzada e calcularemos as pontuações correspondentes.

# Evaluate the classifier using cross-validation
cv_scores = cross_val_score(pipeline, X, y, cv=5)

print(f"Cross-validation scores: {cv_scores}")
print(f"Mean CV accuracy: {np.mean(cv_scores):.2f}")

Há uma grande variação nas pontuações, com máximas de 95% e mínimas de 92%.

Cross-validation scores: [0.95079365 0.94126984 0.93492063 0.94285714 0.92222222]
Mean CV accuracy: 0.94

Classificador de ensacamento

Agora, vamos criar um classificador de ensacamento usando um estimador de base como nosso pipeline (escalar + classificador de árvore de decisão) e treiná-lo em um conjunto de dados de treinamento.

Podemos melhorar o desempenho do modelo aumentando n_estimators, mas 50 é suficiente para os resultados da linha de base.

from sklearn.ensemble import BaggingClassifier

# Create a bagging classifier with the decision tree pipeline
bagging_classifier = BaggingClassifier(base_estimator=pipeline, n_estimators=50, random_state=42)

# Train the bagging classifier on the training data
bagging_classifier.fit(X_train, y_train)

Diagrama de pipeline do BaggingClassifier

Avaliação do modelo de conjunto

Vamos avaliar os resultados do modelo de conjunto e compará-los com o desempenho do modelo único. Para isso, geraremos relatórios de classificação em um conjunto de dados de teste.

# Make prediction on the testing data
y_pred = bagging_classifier.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

Como você pode ver, melhoramos comparativamente o desempenho do modelo. A precisão e a recuperação da classe minoritária aumentaram de 79% para 80% e de 77% para 82%, respectivamente. Isso representa uma melhoria significativa.

Resultados do desempenho do modelo

Vamos agora calcular a pontuação da validação cruzada.

# Evaluate the classifier using cross-validation
cv_scores = cross_val_score(bagging_classifier, X, y, cv=5)

print(f"Cross-validation scores: {cv_scores}")
print(f"Mean CV accuracy: {np.mean(cv_scores):.2f}")

Nossas pontuações de validação cruzada têm baixa variação, variando de 94% a 96%. A precisão geral do modelo também aumentou de 94% para 95%.

Cross-validation scores: [0.95396825 0.95714286 0.94126984 0.96190476 0.95714286]
Mean CV accuracy: 0.95

A técnica de ensacamento é uma ferramenta útil em aplicativos de aprendizado de máquina para melhorar a precisão e a estabilidade do modelo.

Aprenda técnicas de conjunto, como bagging, boosting e stacking, para criar modelos avançados e eficazes de aprendizado de máquina em Python com o curso Ensemble Methods in Python.

Práticas recomendadas e dicas

Ao usar o bagging no aprendizado de máquina, seguir as práticas recomendadas e as dicas pode maximizar sua eficácia:

  1. Use o ensacamento quando você tiver modelos de alta variação, como árvores de decisão, para melhorar a estabilidade.
  2. Combine bagging com validação cruzada para obter uma avaliação mais confiável de seus modelos.
  3. Use florestas aleatórias (árvores de decisão ensacadas) como uma técnica de ensacamento avançada e pronta para uso.
  4. Defina um valorn_estimators mais alto , como 100-200, ao ensacar para obter o máximo benefício.
  5. O ensacamento é facilmente paralelizado usando n_jobs. Implemente-o em várias CPUs/máquinas para um treinamento mais rápido.
  6. Como o bagging se baseia na amostragem bootstrap, certifique-se de que cada modelo seja treinado em um subconjunto de dados suficientemente diversificado.
  7. Antes de agregar, otimize o desempenho de cada modelo usando GridSearchCV. O bom desempenho dos modelos individuais geralmente se traduz em um melhor desempenho do conjunto.

Leia as práticas recomendadas de MLOps (operações de aprendizado de máquina) para conhecer as práticas bem-sucedidas de MLOps para uma implantação confiável e dimensionável de sistemas de aprendizado de máquina.

Conclusão

Neste tutorial, exploramos o bagging, uma técnica avançada de aprendizado de máquina de conjunto. O ensacamento agrega vários modelos para melhorar o desempenho preditivo geral. Nós o comparamos com o boosting e aprendemos sobre suas vantagens em relação ao uso de um único modelo.

No final, implementamos um classificador de ensacamento em Python em um conjunto de dados de rotatividade de telecomunicações. O conjunto de árvores de decisão ensacadas melhorou a precisão e o desempenho da classe minoritária em relação a uma única árvore de decisão. Além disso, aprendemos dicas e truques valiosos para maximizar a eficácia do bagging no aprendizado de máquina.

Se você deseja seguir uma carreira como engenheiro de aprendizado de máquina profissional, comece inscrevendo-se no curso de carreira de Cientista de Aprendizado de Máquina com Python. Você aprenderá a treinar modelos supervisionados, não supervisionados e de aprendizagem profunda usando a linguagem de programação Python.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Tópicos

Comece sua jornada de aprendizado de máquina hoje mesmo!

Curso

Aprendizado de máquina com modelos baseados em árvores em Python

5 h
117.3K
Neste curso, você aprenderá a usar modelos baseados em árvores e conjuntos para regressão e classificação usando o scikit-learn.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

8 modelos de aprendizado de máquina explicados em 20 minutos

Descubra tudo o que você precisa saber sobre os tipos de modelos de aprendizado de máquina, inclusive para que eles são usados e exemplos de como implementá-los.
Natassha Selvaraj's photo

Natassha Selvaraj

15 min

Tutorial

Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python

Aprenda os truques comuns para lidar com dados categóricos e pré-processá-los para criar modelos de aprendizado de máquina!
Moez Ali's photo

Moez Ali

Tutorial

O que é Boosting?

Com o Boosting, você melhora o desempenho do machine learning corrigindo erros sequencialmente e combinando alunos fracos em preditores fortes.

Tutorial

Vendo como uma máquina: Guia para iniciantes em análise de imagens em aprendizado de máquina

Descubra como os computadores "veem" e interpretam imagens, as técnicas usadas para manipular imagens e como o aprendizado de máquina mudou o jogo.
Amberle McKee's photo

Amberle McKee

Ver MaisVer Mais