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.
Actualizado 16 de jan. de 2025  · 10 min de leitura

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.

Temas

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

curso

Preprocessing for Machine Learning in Python

4 hr
52.8K
Learn how to clean and prepare your data for machine learning!
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
Big Data Concept

blog

Agrupamento no aprendizado de máquina: 5 Algoritmos de agrupamento essenciais

Saiba o que é clustering e como ele é usado no aprendizado de máquina. Veja os diferentes tipos de agrupamento no aprendizado de máquina e confira algumas perguntas frequentes.
Moez Ali's photo

Moez Ali

15 min

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

25 min

tutorial

Uma introdução ao Q-Learning: Um tutorial para iniciantes

Saiba mais sobre o algoritmo mais popular de aprendizado por reforço sem modelo com um tutorial em Python.
Abid Ali Awan's photo

Abid Ali Awan

16 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

28 min

tutorial

O que é Boosting?

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

Vinod Chugani

11 min

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

28 min

Ver maisVer mais