我正在使用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,)
答案 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中所述。