【问题标题】:Getting large cross-validation scores for Linear Regression in Scikit-Learn在 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 个新的巨大分数值。

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

【问题讨论】:

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

标签: python machine-learning scikit-learn linear-regression cross-validation


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2018-04-02
    • 2014-07-30
    • 2020-04-06
    • 2017-03-30
    • 2015-07-07
    • 1970-01-01
    • 2016-04-25
    • 2016-02-11
    相关资源
    最近更新 更多