Работая над набором данных пациентов с индийской печенью из UCI (http://archive.ics.uci.edu/ml/datasets/ILPD+%28Indian+Liver+Patient+Dataset%29), я обучил 2 модели, RF и SVM, чтобы предсказать двоичную метку.
Я пытался оптимизировать его в обоих случаях для точности как метри c, используя refit в RandomizedSearchCV, но каждый раз отзыв был намного выше (для RF 76,5 против 97%, для SVM 78% против 100%). Мне интересно, если я что-то сделал не так, или вы иногда просто не можете улучшить определенные показатели выше определенного уровня.
def randomized_search_wrapper(pipeline, ranking=0, iterations=100, cores=-1, refit_score='precision_score'):
"""
Fits a RandomizedSearchCV classifier using refit_score for
optimization, prints classifier performance metrics"""
randomized_search = RandomizedSearchCV(pipeline, param_grid, cv=10,
refit=refit_score, scoring=scorers, return_train_score=True,
n_iter=iterations, random_state=42, verbose=0, n_jobs=cores)
randomized_search.fit(X_train, y_train)
print(f'Best params for {refit_score}')
print(randomized_search.best_params_)
return randomized_search
Используемые счетчики:
scorers = {
'accuracy_score': make_scorer(accuracy_score),
'precision_score': make_scorer(precision_score),
'recall_score': make_scorer(recall_score),
'f1_score': make_scorer(f1_score),
'roc_auc_score': make_scorer(roc_auc_score)
}