python - 使用 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)
}
解决方案
推荐阅读
- c++ - 更改变量值C ++时的继承问题
- laravel - 带有 Nova 的 Laravel 7.x 无法使用来自 optimistdigital/nova-menu-builder 的菜单
- reactjs - 与样式化组件反应...无法阻止图像垂直拉伸
- javascript - 如何使用 setTimeout 逐行执行 for 循环?
- ruby-on-rails - 如何隐藏丑陋的 aws s3 url - RoR 应用程序
- java - 标准PBEByteEncryptor 锁
- ios - UITableView 不更新数据
- netlogo - Netlogo 上下文未对齐
- node.js - 使用 Angular Universal 实现客户端/服务器文件夹结构?
- html - 为什么不跨越行的 100% 宽度?HTML CSS