【发布时间】: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