我正在使用sklearn的GridSearchCV来获得我的随机林模型的最佳参数。
下面是我的代码
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,)发布于 2019-01-31 18:35:32
在gridsearch中,如果不指定任何记分器,则使用估计器的默认记分器(此处为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的期望值,而不考虑输入特性,则得到R^2分数为0.0。
R平方基本上是你的模型所解释的方差百分比。
您还可以看到,与简单的模型相比,回归更好,预测的值总是相同的(平均值)(所以是2D中的一条线)。
如果你的R平方是负的,这意味着你的模型比一条简单的水平线差,这意味着你的模型不适合你的数据。
在您的例子中,您的列车R^2非常好,所以这要么意味着您设法将您的数据过度匹配(但这是不可能的),要么就是测试数据与火车数据不类似。
发布于 2021-06-10 15:31:11
除了R^2可能是负值(在其他答案中详细说明)之外,值得注意的是,评分API的实现总是将值最小化,因此,对于用户提供的评分函数来说,如果更高的话,符号就会翻转,正如https://stackoverflow.com/a/27323356/6917627中所解释的那样。
https://stackoverflow.com/questions/54462142
复制相似问题