0

В принципе, у меня есть следующие в C++ (OpenCV):Как реализовать эквивалентную версию Adaboost в OpenCV и SciKit-learn?

CvMLData cvml ... 

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

и следующее в Python (SciKit учиться):

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

Как сделать их похожими (или эквивалент)?

Прямо сейчас, я получаю низкую ошибку тест с OpenCV (< 10%) и высокой один в SciKit-Learn (> 40%, так что почти случайным образом)

ответ

1

Оба AdaBoost и деревья решений есть несколько параметров, которые может сильно повлиять на конечный результат. Чтобы получить похожие классификаторы, вы должны использовать схожие параметры - например, в вашем коде на C++ вы используете 1000 слабых оценок по сравнению с 100 в вашем коде на языке python.

Посмотрите на разницу между двумя реализациями adaboost и деревьями решений и попытайтесь изменить свои параметры, чтобы они соответствовали максимально возможному.

Также, если ваша цель состоит в том, чтобы снизить тестовую ошибку и не обязательно получить два эквивалентных классификатора, вы можете просто оптимизировать свой предпочтительный классификатор, а не полностью их выравнивать.

+0

К сожалению, это была опечатка в моем примере, в моем коде она такая же. Я пытаюсь поставить те же параметры в обоих классификаторах, и я прочитал документацию, чтобы сделать это; пока все кажется подходящим. –