Multiclassificadores: Bagging

É um sistema que contem vários tipos de classificadores, com diferentes níveis e características, onde suas saídas são combinadas para assim gerar uma predição ou resultado melhor do que cada um individualmente produziria.

Resultado de imagem para bootstrap boot

Bagging

O bagging ou bootstrap aggregation (Uma explicação sobre oque é bootstrap usando Brigadeiros) é um método em que existe vários classificadores do mesmo tipo, onde cada um desses classificadores pega randomicamente uma parte do conjunto de amostra, cada qual gera suas predições onde a mesma é levada em conta em um sistema de média ou votação para produzir uma predição final (Ver Figura 1 e 2).

OBS: Para cada parte do conjunto de amostra obtido randomicamente pelo classificador, essa amostra poderá ou não contem dados repetidos ou omitidos.

O bagging reduz a variação por causa da média/votação, mas com isso aumenta o viés de sua predição.

Figura 1 – Algoritmo de Bagging. Fonte: Letícia Martins Raposo

Figura 2 – Esquema de como o Bagging funciona. Fonte: Geeks For Geeks

Exemplo de Bagging com Python usando o Arvore de Decisão

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB, BernoulliNB
from sklearn.linear_model import LogisticRegression

def CreateDataFrame(N):
 columns = ['a','b','c','y']
 df = pd.DataFrame(columns=columns)
 for i in range(N):
  a = np.random.randint(10)
  b = np.random.randint(20)
  c = np.random.randint(5)
  y = "normal"
  if((a+b+c)>25):
   y="high"
  elif((a+b+c)<12):
   y= "low"
  df.loc[i]= [a, b, c, y]

 return df


df = CreateDataFrame(200)
print(df.head())

X = df[["a","b","c"]]
Y = df[["y"][0]]
#print("Printando o X")
#print(X)

#print("Printando o Y")
#print(Y)

le=LabelEncoder()
y=le.fit_transform(Y)
#print(y)

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, random_state=0)

dtc = DecisionTreeClassifier(criterion="entropy")
bag_model=BaggingClassifier(base_estimator=dtc, n_estimators=100, bootstrap=True)
bag_model=bag_model.fit(Xtrain,ytrain)

ytest_pred=bag_model.predict(Xtest)

print(bag_model.score(Xtest, ytest))
print(confusion_matrix(ytest, ytest_pred))

O código acima foi adaptado do site DataTechNotes.

Output:

$ python bagging.py 
   a   b  c       y
0  9   0  1     low
1  3   9  2  normal
2  9   4  4  normal
3  1  17  1  normal
4  2  10  3  normal
0.94
[[ 1  0  1]
 [ 0 13  1]
 [ 0  1 33]]

Exemplo de Bagging com Python usando o Classificador KNN

Referências:

[ 1 ] – https://www.geeksforgeeks.org/ml-bagging-classifier/

[ 2 ] – http://www.peb.ufrj.br/teses/Tese0291_2018_01_20.pdf

[ 3 ] – https://scikit-learn.org/stable/modules/ensemble.html#bagging

[ 4 ] – https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html#pandas.DataFrame

[ 5 ] – https://www.datatechnotes.com/2019/03/classification-with-bagging-classifier.html