corss_val_score中的意外R ^ 2损失值

时间:2018-07-18 14:45:08

标签: python machine-learning regression loss-function

我正在处理回归数据集,我希望为我的模型拟合一个特定的模型 评估各种模型的性能后的数据集。我用了cross_val_score 为此,请从sklearn.model_selection中获取。当我将评分参数选择为“ r2”后,我的某些模型得到了极高的负值。

demo = pd.read_csv('demo.csv')
X_train = demo.iloc[0:1460, : ]
Y_train = pd.read_csv('train.csv').loc[:, 'SalePrice':'SalePrice']
X_test = demo.iloc[1460: , : ]

regressors = []
regressors.append(LinearRegression())
regressors.append(Ridge())
regressors.append(Lasso())
regressors.append(ElasticNet())
regressors.append(Lars())
regressors.append(LassoLars())
regressors.append(OrthogonalMatchingPursuit())
regressors.append(BayesianRidge())
regressors.append(HuberRegressor())
regressors.append(RANSACRegressor())
regressors.append(SGDRegressor())
regressors.append(GaussianProcessRegressor())
regressors.append(DecisionTreeRegressor())
regressors.append(RandomForestRegressor())
regressors.append(ExtraTreesRegressor())
regressors.append(AdaBoostRegressor())
regressors.append(GradientBoostingRegressor())
regressors.append(KernelRidge())
regressors.append(SVR())
regressors.append(NuSVR())
regressors.append(LinearSVR())

cv_results = []
for regressor in regressors:
cv_results.append(cross_val_score(regressor, X = X_train, y = Y_train, scoring = 'r2', verbose = True, cv = 10))

编译并运行上述代码后,cv_results如下所示。它是float64数组的列表。每个数组包含10个“ r2”值(由于cv = 10)。

After the above mentioned code is compiled and run, cv_results is as follows. It is a list of float64 arrays. Each array contains 10 'r2' value (due to cv = 10).

我打开第一个数组,并注意到对于此特定模型,某些“ r2”值非常负。

enter image description here

既然“ r2”值应该在0到1之间,为什么会有很大的负值?

1 个答案:

答案 0 :(得分:0)

这是事实:R^2值实际上不需要在[0,1]中。

本质上,R^2的基线为0,因为0意味着您的模型没有更好的表现, 并不比单纯采用响应变量的平均值差。在您拥有截距项的OLS中,这意味着R^2位于[0,1]中。

但是,对于其他模型,这通常是不正确的;例如,如果您在线性回归模型中进行 fix 拦截,则最终结果可能会比仅仅采取 您的回答的平均值。