0

Au fond, je donne les résultats suivants en C++ (OpenCV):Comment implémenter une version équivalente d'Adaboost dans OpenCV et SciKit-learn?

CvMLData cvml ... 

CvBoost boost; 
boost.train(&cvml, CvBoostParams(CvBoost::REAL, 1000, 0, 1, false, 0), false); 

et les suivantes en Python (scikit-learn):

bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), 
         #algorithm="SAMME.R", 
         n_estimators=1000) 
bdt.fit(X_train, y_train) 

Comment puis-je les rendre semblables (ou équivalent)?

En ce moment, je reçois une erreur de test faible avec OpenCV (< 10%) et un haut un dans scikit-learn (> 40%, donc presque aléatoire)

Répondre

1

Les deux arbres Adaboost et décision ont plusieurs paramètres peut influencer grandement le résultat final. Pour obtenir des classificateurs similaires, vous devez utiliser des paramètres similaires. Par exemple, dans votre code C++, vous utilisez 1000 estimateurs faibles contre 100 dans votre code python. Examinez la différence entre les deux implémentations d'adaboost et les arbres de décision et essayez de modifier vos paramètres pour qu'ils correspondent le mieux possible.

Si votre objectif est de réduire l'erreur de test et pas nécessairement deux classificateurs équivalents, vous pouvez simplement optimiser votre classificateur préféré au lieu de l'aligner parfaitement.

+0

Désolé, c'était une faute de frappe dans mon exemple, c'est pareil dans mon code. J'essaie de mettre les mêmes paramètres dans les deux classificateurs, et j'ai lu la documentation pour le faire; Jusqu'à présent, tout semble correspondre. –