【问题标题】:High difference in predictions on different train test split sizes不同火车测试拆分大小的预测差异很大
【发布时间】: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


【解决方案1】:

当数据具有非常高的方差时,在非常小的测试集中,预测可能会出现显着差异。我会说这是一个*欠拟合*。

首先分析您的数据集,您将通过基本的描述性统计数据(图表、位置和离散度测量等)了解造成这种差异的主要原因。之后,增加测试集的大小,使其平衡,否则您的研究会出现偏差。

但据我所见,一切都很好,唯一的问题是符号e + 01 表示数字乘以10

【讨论】:

  • 这绝对不是欠拟合,因为当我增加测试规模或减少火车规模时,预测实际上变得更好了。我也不认为该模型过度拟合,因为预测往往会随着更多的偏差而变得更相似。但是预测值的反差很大(比如一个预测值是指数值exp+01,另一个是exp+06,以此类推)。
【解决方案2】:

检查您的test_pred 的单位。他们都是x10(被e+01看到)。如果您将 numpy 的打印设置设置为删除np.set_printoptions(suppress=True) 的科学计数法,然后打印您的test_pred,您应该会看到它看起来与train_pred 非常相似。所以简而言之,没有错。

【讨论】:

  • 如果是这样的话,我会很高兴的。但不幸的是,事实并非如此。 exp+06,exp+07 等的值很少。
  • 嗯,好吧。您应该在上面的示例中包含其中一些数据点,因为这指向一个非常不同的问题。
  • @AneeshKrishna 你能张贴你的结果直方图y 变量吗?我的感觉是,您有一个异常值可能存在于拆分 0.2 的训练数据中,并且它位于拆分 0.4 的测试集中......应该很容易检查这种可能性
猜你喜欢
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2017-09-05
  • 2021-10-11
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多