GridsearchCV 负分

Posted

技术标签:

【中文标题】GridsearchCV 负分【英文标题】:GridsearchCV Negative Score 【发布时间】:2019-06-25 00:08:52 【问题描述】:

我正在使用 sklearn 的 GridSearchCV 为我的 Random Forest 模型获取最佳参数。

下面是我的代码

model = RandomForestRegressor(random_state = 1, n_jobs = -1) 
param_grid = "n_estimators": [5, 10]



for parameter, param_range in dict.items(param_grid):   
    #get_optimum_range(parameter, param_range, RFReg, index)

    grid_search = GridSearchCV(estimator=model, param_grid = parameter: param_range)
    grid_search.fit(X_train, y_train)
    results = pd.DataFrame(grid_search.cv_results_)

我的结果数据框如下

如果你观察到我的mean_test_score 是负面的,但mean_train_score 是正面的。

同样的原因可能是什么?

我的数据框大小

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

(538, 3)
(538,)
(112, 3)
(112,)

【问题讨论】:

【参考方案1】:

在 gridsearch CV 中,如果您未指定任何记分器,则使用估计器的默认记分器(此处为 RandomForestRegressor):对于随机森林回归器,默认得分是 R 平方得分:它也可以称为确定系数。

返回预测的决定系数 R^2。

系数R^2定义为(1 - u/v),其中u是残差平方和 > ((y_true - y_pred) ** 2).sum(),v是总平方和((y_true - y_true.mean()) ** 2).sum()。最好的分数是 1.0,它可以是负数(因为模型可以任意变差)。始终预测 y 的期望值的常量模型,不考虑输入特征,将获得 0.0 的 R^2 分数。

R 平方基本上是您的模型解释的方差百分比。 您还可以看到,与预测始终相同值(均值)(即二维线)的简单模型相比,您的回归要好多少。

如果您的 R 平方为负,这意味着您的模型比简单的水平线更差,这意味着您的模型不能很好地拟合您的数据。 在您的情况下,您的火车 R^2 非常好,因此要么意味着您设法过度拟合您的数据(但不太可能),要么只是测试数据与火车数据不相似。

【讨论】:

【参考方案2】:

除了 R^2 可以为负(在其他答案中详细说明)这一事实之外,值得注意的是,评分 API 被实现为总是最小化 值,所以如果更高则更好用户提供的评分功能,标志被翻转,如https://***.com/a/27323356/6917627中所述。

【讨论】:

以上是关于GridsearchCV 负分的主要内容,如果未能解决你的问题,请参考以下文章

TFIDF 的 Python ScikitLearn GridSearchCV 问题 - JobLibValueError?

gridsearchcv怎么调参

best_score_的gridsearch cv的AUC分数与gridsearch cv的最佳模型的auc_roc_score不同

将最佳 GridSearch 分类器写入表格

GridSearch 用于 OneVsRestClassifier 中的估计器

最佳模型的 GridSearch:保存和加载参数