交叉验证得分中意外出现的R^2损失值

我正在处理一个回归数据集,希望在评估了各种模型的性能后,将特定模型拟合到我的数据集上。为此,我使用了sklearn.model_selection中的cross_val_score。当我将评分参数设为’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)。

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

我打开第一个数组,发现对于这个特定的模型,有些’r2’值非常负。

enter image description here

由于’r2’值应在0到1之间,为什么会有非常大的负值?


回答:

事情是这样的:R^2值实际上并不需要在[0, 1]之间。

本质上,R^2有一个基线值0,意味着0表示你的模型的表现与仅仅取响应变量的平均值一样好或一样差。在OLS中,如果你有截距项,这意味着R^2会在[0, 1]之间。

然而,对于其他模型,情况并非总是如此;例如,如果你在线性回归模型中固定截距,你可能会比仅仅取响应变量的平均值表现得更差。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注