在 Scikit-Learn 中获得线性回归的大交叉验证分数

Posted

技术标签:

【中文标题】在 Scikit-Learn 中获得线性回归的大交叉验证分数【英文标题】:Getting large cross-validation scores for Linear Regression in Scikit-Learn 【发布时间】:2018-12-04 06:57:01 【问题描述】:

我已经清理并准备了一个数据集,以 4 种不同的回归类型建模 - 线性、套索、山脊和随机森林 DT。

问题在于线性回归模型。在 k = 5 中运行 CV 时,我得到:

linreg = LinearRegression()
linreg.fit(X_train, y_train)

y_pred = linreg.predict(X_test)
cv_scores_linreg = cross_val_score(linreg, X_train, y_train, cv=5)


print("R^2: ".format(linreg.score(X_test, y_test)))
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("Root Mean Squared Error: ".format(rmse))
print("Mean 5-Fold CV Score: ".format(np.mean(cv_scores_linreg)))

print(cv_scores_linreg)

给我打印一个分数:

R^2: 0.40113615279035175
Root Mean Squared Error: 0.7845007237654832
Mean 5-Fold CV Score: -8.07591739989044e+19
[ 3.70497335e-01 -9.07945703e+19  3.38625853e-01  3.38206306e-01
 -3.13001300e+20]

对于我使用的随机森林:

rf_reg = RandomForestRegressor()    
rf_reg.fit(X_train, y_train)

y_pred_rf = rf_reg.predict(X_test)

cv_scores_rf = cross_val_score(rf_reg, X_train, y_train, cv=5)
print("R^2: ".format(rf_reg.score(X_test, y_test)))
rmse = np.sqrt(mean_squared_error(y_test, y_pred_rf))
print("Root Mean Squared Error: ".format(rmse))
print("Mean 5-Fold CV Score: ".format(np.mean(cv_scores_rf)))

print(cv_scores_rf)

这给出了:

R^2: 0.42158777391603736
Root Mean Squared Error: 0.770988735248686
Mean 5-Fold CV Score: 0.3894909330419569
[0.39982241 0.39516204 0.37037191 0.38400655 0.39809175]

我不明白为什么我所有的其他模型都给我类似于随机森林的值。唯一的异常值是线性模型。当我更改 k = 10、20、30 等时,每 +10 到 k 似乎有 1 个新的巨大分数值。

我已取出所有空数据、空格,并将我的数据放入对数刻度中以将其全部标准化。 当只有线性模型产生问题时会出现什么问题?

【问题讨论】:

scikit-learn cross validation, negative values with mean squared error的可能重复 可能,但这不是我关心的值的符号,它是 19 和 20 幂的指数。我不知道这是从哪里来的。 您应该尝试在 cross_val_score 中重现示例(通过使用可重现的 cv 来检查每次测试折叠的分数)或在此处发布重复行为的数据。没有实际数据,我们无能为力 是的,正如@VivekKumar 所说,没有数据这很难说。检查assumptions behind the linear model 并检查您的数据是否满足要求。最重要的是检查是否有高度相关的变量。如果是这样,请放弃其中一个或尝试使用岭回归,这是一种可以处理共线性的惩罚线性回归。 【参考方案1】:

我也遇到过同样的问题。 通过使用岭回归而不是简单的线性回归来解决它。

【讨论】:

以上是关于在 Scikit-Learn 中获得线性回归的大交叉验证分数的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 scikit-learn 线性回归模型时出错

如何修复我在 scikit-learn 中的线性回归中遇到的错误

Python/Scikit-learn - 线性回归 - 访问线性回归方程

scikit-learn 线性回归算法库小结

R 与 scikit-learn 中用于线性回归 R2 的交叉验证

scikit-learn 线性回归算法库小结