Как я могу лучше использовать AdaboostClassfier? - PullRequest
0 голосов
/ 12 июля 2020

Мне нужно решить проблему классификации мультиклассов в python.

Я начал использовать ансамбли, и я начал с adaboostclassfier, но после поиска по сетке я получил плохие результаты.

Что я сделал заключается в использовании настроенного classfier (в списке classfier, который я пробовал), который показывает мне лучший результат в качестве базовой оценки: SV C ().

Затем я провел поиск по сетке по другим параметрам AdaBoostClassfier :

n_estimators: [1,50,100,150]
learning_rate: [0.1,0.4,0.7,1]
algorithm: ['SAMME']

Теперь у меня к вам 3 вопроса:

  1. Почему настроенный SV C () показывает 82,5% от f1_macro, а AdaBoostClassfier показывает только 1 оценку 18,6%?
  2. Почему с более чем 1 оценкой я не могу улучшить оценку f1_macro с помощью AdaBoostClassfier?
  3. Возможно ли, что усиление ухудшает ситуацию с моим набором данных, или я что-то делаю не так?

Это мой код:

def adaBoost_try(train_x, train_y, test_x, test_y):
base_estimator = svm.SVC(C=60, class_weight=None, decision_function_shape='ovo', kernel='rbf', gamma=0.1, random_state=0)
classfier = AdaBoostClassifier()
pipeline = [
    ('scaler', scaler),
    ('reduce_dim', pca),
    ('classfier', classfier)]
best_params = [{
    'scaler':[scaler_quantile],
    'reduce_dim': [pca],
    'reduce_dim__n_components': [15],
    'classfier__base_estimator': [base_estimator],
    'classfier__n_estimators': [1,50,100,150],
    'classfier__learning_rate': [0.1,0.4,0.7,1],
    'classfier__algorithm': ['SAMME'],
    'classfier__random_state': [0]
}]
pipe = Pipeline(pipeline, memory=cachedir)
my_scoring = 'f1_macro'
n_folds = 5
gscv = GridSearchCV(pipe, param_grid=best_params, scoring=my_scoring, n_jobs=-1, cv=n_folds, refit=True)
gscv.fit(train_x, train_y)
print(gscv.best_params_)
print(gscv.best_score_)
print(gscv.score(test_x,test_y))

1 Ответ

0 голосов
/ 13 июля 2020

Обычно использование ансамблевого метода превосходит один предиктор.

Adaboost, в частности, будет соответствовать нескольким базовым классификаторам последовательно. Алгоритм Adaboost изменяет веса примеров для каждого классификатора, так что классификатор специализируется на (или "уделяет больше внимания") ошибочно классифицированным примерам предыдущего классификатора.

Это немного неожиданно, что один SV C превзойдет Adaboost из SV C.

Мое главное предложение - использовать GridSearch гиперпараметры SV C вместе с гиперпараметрами AdaBoostClassifier (подробности см. В следующей ссылке о том, как реализовать: Использование GridSearchCV с AdaBoost и DecisionTreeClassifier ). В зависимости от размера вашего набора данных использование многих оценщиков может не соответствовать вашим данным. Если у вас небольшой набор данных, я бы посоветовал попробовать в GridSearch несколько оценок от 1 до 50.

...