GridsearchCV负面分数

时间:2019-01-31 13:55:41

标签: python scikit-learn random-forest grid-search

我正在使用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_)

我的结果数据框如下

enter image description here

如果您观察到我的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,)

2 个答案:

答案 0 :(得分:1)

在gridsearch CV中,如果您未指定任何计分器,则使用估计器的默认计分器(此处为RandomForestRegressor):对于Random Forest Regressor,默认计分是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平方基本上是模型解释的方差百分比。
您还可以看到,与简单的模型始终预测相同的值(均值)(2D中的一条线)相比,您的回归要好得多。

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

答案 1 :(得分:0)

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