如何使用多个评分器从 GridSearchCV 获取平均测试分数 - scikit-learn

数据挖掘 scikit-学习 计分 网格搜索 网格搜索
2021-10-16 06:38:36

我正在尝试从 scikit-learnGridSearchCV获得多个评分员的平均测试分数。

grid.cv_results_显示大量信息。grid.cv_results_['mean_test_score']一直给我一个错误。

我检查了文档和类似的问题,但没有运气。我究竟做错了什么?

代码:

scorers = {
    'r2': 'r2',
    'nmsle': 'neg_mean_squared_log_error',
    'nmse': 'neg_mean_squared_error'
}

params = [
    {
        'regressor': [GradientBoostingRegressor()], 'preprocessing': [None],
    },
]

grid = GridSearchCV(pipe, params, cv=5, scoring=scorers, refit='nmse')
grid.fit(X_t, y_train)

grid.cv_results_['mean_test_score']

错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-161-a021fe7b05bb> in <module>
     20 print(f'Val score set score rmse: {rm}')
     21 
---> 22 grid.cv_results_['mean_test_score']
     23 
     24 # for mean in means:

~/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py in __getitem__(self, key)
    124             warn_args, warn_kwargs = self._deprecations[key]
    125             warnings.warn(*warn_args, **warn_kwargs)
--> 126         return super(DeprecationDict, self).__getitem__(key)
    127 
    128     def get(self, key, default=None):

KeyError: 'mean_test_score'
```
1个回答

对于多指标评估,所有评分者的分数都可以在 cv_results_ dict 中以该评分者的姓名('_scorer_name')结尾的键处获得。所以用

grid.cv_results_['mean_test_(scorer_name)']

例如:grid.cv_results_['mean_test_r2']