Pular para o conteúdo principal
InicioTutoriaisAprendizado de máquina

O que é Boosting?

Com o Boosting, você melhora o desempenho do machine learning corrigindo erros sequencialmente e combinando alunos fracos em preditores fortes.
Actualizado 16 de ago. de 2024  · 11 min leer

Os recentes avanços em machine learning introduziram novas maneiras de lidar com problemas complexos. O impulsionamento é uma técnica que continua se mostrando promissora. Ele está mudando a forma como abordamos a modelagem de dados, usando vários algoritmos para melhorar o desempenho. Como o conceito de boosting continua a evoluir, surgiram novas variantes, como o Gradient Boosting e o XGBoost, que ultrapassam os limites da velocidade e da precisão.

Não se preocupe se você achar que há muito a aprender na área de modelagem preditiva. Experimente nossos programas de carreira Associate Data Scientist in Python ou Data Scientist in Python, bem como nosso tutorial Explore Ensemble Learning Techniques para que você continue aprendendo. 

Impulsionamento no machine learning

O Boosting é um método avançado de aprendizado de conjunto no machine learning, projetado especificamente para melhorar a precisão dos modelos preditivos, combinando vários alunos fracos - modelos que têm um desempenho apenas ligeiramente melhor do que a adivinhação aleatória - em um único aluno forte. 

A essência do boosting está no processo iterativo em que cada aprendiz fraco é treinado para corrigir os erros de seu antecessor, melhorando gradualmente o desempenho geral do modelo. Ao se concentrar nos erros cometidos por modelos anteriores, o reforço transforma um conjunto de alunos fracos em um modelo mais preciso. 

Como funciona o impulsionamento

O Boosting transforma alunos fracos em um aluno unificado e forte por meio de um processo sistemático que se concentra na redução de erros no treinamento de modelos sequenciais. As etapas envolvidas incluem:

  1. Selecione Initial Weights (Pesos iniciais): Atribua pesos iniciais a todos os pontos de dados para indicar sua importância no processo de aprendizado.
  2. Treinar sequencialmente: Treine o primeiro aluno fraco nos dados. Depois de avaliar seu desempenho, aumente os pesos das instâncias mal classificadas. Isso faz com que o próximo aluno fraco se concentre mais nos casos mais difíceis.
  3. Iterar o processo: Repita o processo de ajuste de pesos e treinamento dos alunos subsequentes. Cada novo modelo se concentra nos pontos fracos do conjunto até o momento.
  4. Combinar os resultados: Agregar as previsões de todos os alunos fracos para formar o resultado final. Normalmente, a agregação é ponderada, em que os alunos mais precisos têm mais influência.

Esse método minimiza os erros de forma eficaz, concentrando-se mais intensamente em casos difíceis nos dados de treinamento, o que resulta em um forte desempenho preditivo.

Tipos de algoritmos de reforço

Vamos dar uma olhada em alguns dos algoritmos de aumento mais conhecidos. 

AdaBoost (Boosting adaptativo)

O AdaBoost é um dos primeiros algoritmos de reforço. Ele se concentra em reponderar os exemplos de treinamento cada vez que um aluno é adicionado, dando mais ênfase às instâncias classificadas incorretamente. O AdaBoost é particularmente eficaz para problemas de classificação binária. Leia nosso tutorial sobre o classificador AdaBoost em Python para saber mais.

Aumento de gradiente

O aumento de gradiente cria modelos sequencialmente e corrige erros ao longo do caminho. Ele usa um algoritmo de descida de gradiente para minimizar a perda ao adicionar novos modelos. Esse método é flexível e pode ser usado tanto para problemas de regressão quanto de classificação. Nosso tutorial, A Guide to The Gradient Boosting Algorithm (Guia para o algoritmo Gradient Boosting), descreve esse processo em detalhes. 

XGBoost (Extreme Gradient Boosting)

O XGBoost é uma biblioteca otimizada de aumento de gradiente distribuído e o método preferido de muitos vencedores de competições no Kaggle. Ele foi projetado para ser altamente eficiente, flexível e portátil. Ele implementa algoritmos de machine learning sob a estrutura Gradient Boosting, oferecendo uma solução escalável e precisa para muitos problemas práticos de dados. Para obter um estudo mais detalhado, considere revisar nosso tutorial Using XGBoost in Python e fazer nosso curso dedicado: Extreme Gradient Boosting com XGBoost.

Métodos de conjunto

O Boosting pertence ao grupo maior de métodos de conjunto. Os métodos de conjunto são uma abordagem de machine learning que combina vários modelos para produzir previsões mais precisas do que qualquer modelo individual poderia alcançar sozinho. Essas técnicas funcionam utilizando a diversidade de modelos diferentes, cada um com seus próprios pontos fortes e limitações, para criar um processo coletivo de tomada de decisões.

Diferentes tipos de métodos de conjunto

O Boosting é uma técnica de aprendizado de conjunto proeminente, mas é apenas uma entre várias que aumentam a força preditiva dos modelos. Vamos dar uma olhada em alguns outros.

  • Bagging (Agregação de bootstrap): Um método que treina vários modelos em subconjuntos aleatórios dos dados de treinamento e agrega suas previsões. Isso reduz a variação e ajuda a evitar o ajuste excessivo.
  • Empilhamento (generalização empilhada): Uma técnica que combina vários modelos por meio do treinamento de um metamodelo para aprender como combinar melhor as previsões dos modelos básicos. Ele pode capturar padrões complexos que os modelos individuais podem deixar passar.
  • Mistura: Semelhante ao empilhamento, mas usa um conjunto de validação retido para treinar o metamodelo em vez de validação cruzada. É mais simples e rápido do que o empilhamento, mas pode ser menos robusto.
  • Votação: Combina previsões de vários modelos por voto majoritário (votação difícil) ou média ponderada das probabilidades previstas (votação suave). É simples de implementar e pode ser eficaz com diversos modelos básicos.

Impulsionamento vs. ensacamento

O impulsionamento é frequentemente comparado ao ensacamento, em particular. Embora sejam semelhantes em alguns aspectos, há definitivamente grandes diferenças. Abaixo você encontra uma tabela que compara o boosting com o bagging:

Recurso Impulsionamento Ensacamento
Foco conceitual Melhora sequencialmente a precisão, concentrando-se em exemplos anteriormente mal classificados. Treina vários modelos em subconjuntos aleatórios, calculando a média de suas previsões.
Treinamento de modelos O treinamento sequencial permite que cada modelo aprenda com os erros do modelo anterior. O treinamento paralelo de modelos em amostras de dados variados aumenta a diversidade.
Redução de erros Reduz principalmente a tendência e, em menor grau, a variação. Reduz a variação, especialmente em modelos complexos que tendem a se ajustar demais.
Sensibilidade a outliers Mais sensível devido ao maior foco em dados com classificação incorreta. Menos sensível, pois a amostragem aleatória dilui o impacto dos valores discrepantes.
Exemplos AdaBoost, Gradient Boosting, XGBoost. Florestas aleatórias, agregação de bootstrap.

Se você estiver interessado em saber mais sobre ensacamento, leia nosso tutorial O que é ensacamento no machine learning? que usa o sklearn. 

Uma implementação de reforço em Python

Uma das melhores maneiras de entender o boosting é tentar mostrá-lo na prática. Para isso, usaremos esse conjunto de dados do Kaggle de classificação de tipos de amêndoas, que apresenta três tipos de amêndoas: MAMRA, SANORA, e REGULAR, e seus atributos físicos exclusivos, como área, perímetro e arredondamento. 

As características de cada amostra de amêndoa foram extraídas por meio de técnicas sofisticadas de processamento de imagens. Os valores nulos no conjunto de dados representam instâncias em que a orientação da amêndoa - se mantida na vertical, deitada de lado ou de costas - afetou a precisão do processo de extração de recursos. 

Vamos agora usar esse conjunto de dados para tentar uma tarefa de classificação. Usaremos o algoritmo AdaBoost, que, como já dissemos, melhora o desempenho do modelo combinando aprendizes fracos em um forte.

1. Importação de bibliotecas

Começamos importando as bibliotecas necessárias e carregando o conjunto de dados da amêndoa. Em seguida, dividimos os recursos e as variáveis de destino.

import pandas as pd
almonds = pd.read_csv('Almond.csv', index_col=0)
X = almonds.drop('Type', axis=1)  
y = almonds['Type']

2. Tratamento de dados ausentes

Em seguida, limpamos o conjunto de dados preenchendo os valores ausentes usando o imputador KNN. Isso garante que você tenha um conjunto de dados completo para o nosso modelo.

from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)

3. Dividir os dados para treinamento e teste

Dividimos os dados em conjuntos de treinamento e de teste para que possamos avaliar como nosso modelo lidaria com novos dados.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)

4. Treinamento de um classificador de árvore de decisão

Treinamos um modelo simples de árvore de decisão aqui, o que nos dá uma precisão de linha de base antes de continuarmos a aumentar seu desempenho.

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
tree = DecisionTreeClassifier(max_depth=1, random_state=42)
tree.fit(X_train, y_train)
tree_accuracy = accuracy_score(y_test, tree.predict(X_test))

5. Aprimoramento do desempenho com o AdaBoost

Em seguida, usamos o AdaBoost para melhorar o desempenho da nossa árvore de decisão, concentrando-nos em seus erros e aumentando a precisão.

from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(base_estimator=tree, n_estimators=100, learning_rate=1.0, random_state=42)
ada.fit(X_train, y_train)
ada_accuracy = accuracy_score(y_test, ada.predict(X_test))

# Print the accuracies
print(f'Accuracy of the weak learner (Decision Tree): {tree_accuracy * 100:.2f}%')
print(f'Accuracy of AdaBoost model: {ada_accuracy * 100:.2f}%')

6. Resultado final

Por fim, comparamos os resultados e vemos como o AdaBoost melhora significativamente a precisão.

Accuracy of the weak learner (Decision Tree): 43.14%
Accuracy of AdaBoost model: 61.50%

Então, qual é a conclusão? Os resultados ilustram o poder da aprendizagem em conjunto por meio do AdaBoost. Aqui, o aprendiz fraco era uma árvore de decisão com uma profundidade máxima de apenas um, que tinha uma precisão modesta de cerca de 43%. Como havia apenas três tipos de amêndoas, uma precisão de 43% não é muito maior do que a média de adivinhação. No entanto, quando esse aluno fraco foi usado como estimador de base em um modelo AdaBoost com 100 iterações, a precisão aumentou para 62%.

Para dar um passo atrás, como uma nota de cautela, embora o AdaBoost tenha relatado uma maior precisão em nosso conjunto de dados Almonds, ele pode nem sempre ser o mais adequado para todas as situações. Há um risco de ajuste excessivo, especialmente com conjuntos de dados menores como este, em que o modelo pode se tornar excessivamente complexo. Na realidade, técnicas de classificação mais simples podem ter o mesmo desempenho ou até melhor para determinadas tarefas. Portanto, embora tenhamos usado o AdaBoost aqui para ilustrar o conceito, é importante dar um passo atrás e considerar se realmente queremos um alto nível de complexidade.

Conclusão

O Boosting representa um avanço significativo no campo do machine learning, mostrando o poder dos métodos de conjunto para aumentar a precisão da previsão. Conforme exploramos, os algoritmos de reforço, como AdaBoost, Gradient Boosting e XGBoost, operam com base em um princípio fundamental: combinar vários modelos fracos para criar um único preditor mais eficaz. 

No entanto, é importante lembrar que o aumento é apenas uma ferramenta do kit de ferramentas do machine learning. Sua eficácia pode variar de acordo com o problema específico. Como acontece com qualquer técnica de machine learning, entender quando e como aplicar o boosting é fundamental para que você possa aproveitar todo o seu potencial.

Para aprofundar seu conhecimento sobre boosting e outros conceitos de machine learning, considere explorar o programa de carreira abrangente Machine Learning for Everyone do DataCamp. Se você deseja se especializar ainda mais, o programa de carreira Cientista de Machine Learning com Python oferece treinamento aprofundado em técnicas avançadas e aplicações práticas.

Perguntas frequentes

O que é o boosting no machine learning?

Boosting é uma técnica de aprendizado de conjunto usada para melhorar a precisão dos modelos preditivos. Ele combina vários alunos fracos - modelos com desempenho apenas ligeiramente melhor do que a adivinhação aleatória - em um único aluno forte, o que melhora significativamente o desempenho geral do modelo.

Qual é a diferença entre boosting e bagging?

Boosting e bagging são técnicas de conjunto que combinam vários modelos para melhorar as previsões, mas funcionam de forma diferente. O Boosting treina modelos sequencialmente, sendo que cada novo modelo se concentra nos erros dos anteriores para reduzir a tendência e melhorar a precisão. Por outro lado, o bagging treina modelos em paralelo em diferentes subconjuntos de dados, calculando a média de seus resultados para reduzir a variação e aumentar a estabilidade. Enquanto o boosting é sensível a outliers e ruídos, o bagging é mais robusto contra eles devido ao seu método de média.

O boosting pode ser usado para problemas de classificação e regressão?

Sim, as técnicas de reforço podem ser adaptadas tanto para classificação quanto para regressão. Embora o AdaBoost seja mais comumente usado para problemas de classificação, outras variantes, como o Gradient Boosting, também podem ser usadas com eficácia para regressão.

Como você escolhe o número de iterações de aumento?

O número de iterações, ou o número de alunos fracos, em um algoritmo de reforço geralmente depende do conjunto de dados específico e da complexidade do problema. Ele pode ser determinado usando validação cruzada ou técnicas semelhantes para equilibrar entre subajuste e superajuste.

Como o AdaBoost difere de outras técnicas de reforço, como o Gradient Boosting?

O AdaBoost aprimora os pesos das instâncias mal classificadas para concentrar os modelos subsequentes nesses casos desafiadores. O Gradient Boost, por outro lado, ajusta os novos alunos aos erros residuais dos modelos anteriores.

Quais são as principais vantagens de usar o AdaBoost?

As principais vantagens do AdaBoost são a simplicidade, a eficácia e o fato de não exigir conhecimento prévio sobre o aluno fraco. Ele também é muito flexível, podendo ser combinado com qualquer algoritmo de aprendizado, e geralmente é muito bem-sucedido em classificações em que outros métodos podem ter dificuldades.

Quais são algumas alternativas notáveis ao AdaBoost para aumentar o desempenho dos modelos de machine learning?

Algumas alternativas notáveis ao AdaBoost incluem Gradient Boosting, XGBoost, CatBoost, LightGBM e HistGradientBoost.

Quais são alguns tipos de métodos de aprendizagem de conjunto além do reforço?

As formas comuns de aprendizado de conjunto, além do boosting, incluem bagging e stacking, cada uma empregando estratégias diferentes para integrar modelos para maximizar a capacidade de previsão.

Temas

Aprenda Machine Learning com a DataCamp

Course

Understanding Machine Learning

2 hr
203.3K
An introduction to machine learning with no coding involved.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

blog

O que é aprendizado de máquina on-line?

Online ML: Aprende de forma adaptativa a partir de pontos de dados em tempo real, fornecendo previsões oportunas e precisas em ambientes ricos em dados.
Abid Ali Awan's photo

Abid Ali Awan

5 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 do DeepChecks: Automatizando os testes de machine learning

Saiba como realizar a validação de dados e modelos para garantir um desempenho robusto de machine learning usando nosso guia passo a passo para automatizar testes com o DeepChecks.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Entendendo o desvio de dados e o desvio de modelo: Detecção de deriva em Python

Navegue pelos perigos do desvio de modelo e explore nosso guia prático para o monitoramento do desvio de dados.
Moez Ali's photo

Moez Ali

9 min

tutorial

Stemming e lematização em Python

Este tutorial aborda o stemming e a lematização de um ponto de vista prático usando o pacote Python Natural Language ToolKit (NLTK).
Kurtis Pykes 's photo

Kurtis Pykes

12 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

See MoreSee More