Мне нужно решить проблему классификации мультиклассов в 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 вопроса:
- Почему настроенный SV C () показывает 82,5% от f1_macro, а AdaBoostClassfier показывает только 1 оценку 18,6%?
- Почему с более чем 1 оценкой я не могу улучшить оценку f1_macro с помощью AdaBoostClassfier?
- Возможно ли, что усиление ухудшает ситуацию с моим набором данных, или я что-то делаю не так?
Это мой код:
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))