【发布时间】:2020-11-29 08:34:05
【问题描述】:
在使用 LinearRegression 训练线性模型时,我无法弄清楚不同测试列车拆分的预测差异很大的原因。 这是我对数据的初步尝试:
x_train,x_test,y_train,true_p=train_test_split(train,y,random_state=121,test_size=0.2,shuffle=True)
lreg=LinearRegression()
lreg.fit(x_train,y_train)
train_pred=lreg.predict(x_train)
test_pred=lreg.predict(x_test)
这是 train_pred 中的输出:
train_pred
array([12.37512481, 11.67234874, 11.82821202, ..., 12.61139596,
12.13886881, 12.42435563])
这是 test_pred 中的输出:
test_pred
array([ 1.21885520e+01, 1.13462088e+01, 1.14144208e+01, 1.22832932e+01,
1.29980626e+01, 1.17641183e+01, 1.20982465e+01, 1.15846156e+01,
1.17403904e+01, 4.17353113e+07, 1.27941840e+01, 1.21739628e+01,
..., 1.22022858e+01, 1.15779229e+01, 1.24931376e+01, 1.26387188e+01,
1.18341585e+01, 1.18411881e+01, 1.21475986e+01, 1.25104774e+01])
两个变量的预测数据相差很大,而后一个是错误的预测数据。
我已尝试将测试大小增加到 0.4。现在我收到了很好的预测。
x_train,x_test,y_train,true_p=train_test_split(train,y,random_state=121,test_size=0.4,shuffle=True)
lreg=LinearRegression()
lreg.fit(x_train,y_train)
train_pred=lreg.predict(x_train)
test_pred=lreg.predict(x_test)
这些是 train_pred 和 test_pred 的输出:
train_pred
array([11.95505983, 12.66847164, 11.81978843, 12.82992812, 12.44707462,
11.78809995, 11.92753084, 12.6082893 , 12.22644843, 11.93325658,
12.2449481 ,..., 11.69256008, 11.67984786, 12.54313682, 12.30652695])
test_pred
array([12.22133867, 11.18863973, 11.46923967, 12.26340761, 12.99240451,
11.77865948, 12.04321231, 11.44137667, 11.71213919, 11.44206212,
..., 12.15412777, 12.39184805, 10.96310233, 12.06243916, 12.11383494,
12.28327695, 11.19989021, 12.61439939, 12.22474378])
这背后的原因是什么?如何在 0.2 test train split 上纠正这个问题?
谢谢
【问题讨论】:
-
如果数据看起来相似,或者如果您为额外的迭代训练,当测试数据较小时,您的模型可能会过拟合。
-
我可能遗漏了一些东西,但我没有关注
The predicted data of both variables have very huge difference, while the latter one is the wrong predicted data.?在我看来,您显示的数据非常相似。 -
其实你确实错过了一些东西。很少有值具有 e+06 等指数值。
-
检查模型的系数或特征的多重共线性。在这种情况下,您可以很好地进行样本预测,但共线性会导致巨大的样本外问题(由于模型的系数是虚假的,因此值大多是荒谬的)
标签: python pandas scikit-learn data-science