Adaboost com outro encaixe classificador
Existe a oportunidade de ajustar as árvores de decisão a outras árvores de decisão. Por exemplo:
adaclassification= AdaBoostClassifier(RandomForestClassifier(n_jobs=-1))
adaclassification.fit(X_train,y_train)
Obtive melhores resultados com a floresta aleatória, então melhorei o resultado do adaboost com o classificador de floresta aleatória. Porém eu não entendo o que está acontecendo aqui? Parece fácil: adaboost usa uma floresta aleatória para se ajustar à sua classificação. Mas o que está acontecendo matematicamente aqui? Adaboost é feito dos resíduos como uma sequência (reforço). Floresta aleatória (ensacamento) construiu uma floresta de árvores.
Respostas
Sua descrição é adequada. Não há nada especialmente "matemático" acontecendo aqui, além do próprio algoritmo AdaBoost.
No psuedocode, algo assim está acontecendo:
For n in 1 .. N_Estimators do
Train classifier Tn on data X with weights W
Compute weighted residuals E from Tn
Update W based on E
Renormalize W
end
No seu caso, Tnseria um modelo Random Forest, que em si é um conjunto baseado em ensacamento. Portanto, a cada iteração do modelo AdaBoost "externo", um modelo Random Forest inteiro está sendo treinado, ou seja, várias árvores de decisão são ajustadas em subamostras aleatórias de pontos de dados e recursos.
Claro, esta é uma configuração incomum para um modelo de impulso. Mas não há nenhuma razão conceitual ou computacional para que você não possa executar o algoritmo dessa maneira.
Se você está curioso sobre como exatamente os pesos são calculados e atualizados, o Scikit-learn usa o algoritmo SAMME , que é baseado, mas não exatamente idêntico, ao AdaBoost original. SAMME é descrito em "Multi-Class AdaBoost" por Zhu, Rhosset, Zhou, & Hastie (2006).