首页 > 解决方案 > 使用 Scikit Learn,使用 refit 优化模型的精度,但召回率要高得多

问题描述

在 UCI ( http://archive.ics.uci.edu/ml/datasets/ILPD+%28Indian+Liver+Patient+Dataset%29 )的印度肝脏患者数据集上工作,我训练了 2 个模型,RF 和 SVM,以预测一个二进制标签。

我尝试在这两种情况下使用 RandomizedSearchCV 中的 refit 来优化它以将精度作为指标,但每次召回率都要高得多(RF 76.5 vs 97%,SVM 78% vs 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)
}

标签: pythonmachine-learningscikit-learnsvmrandom-forest

解决方案


推荐阅读