不同火车测试分割大小的预测差异很大

时间:2020-08-09 15:46:05

标签: python pandas scikit-learn data-science

在使用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测试列拆分中解决此问题?

谢谢

2 个答案:

答案 0 :(得分:0)

仅当数据具有很高的方差时,在非常小的测试集中,预测中可能会出现显着差异。我会说这是*不合要求的*。

首先分析您的数据集,然后您将通过基本的描述性统计信息(图形,位置和离散度的度量值等)查看造成这种差异的主要原因。之后,请增加测试集的大小,以使其达到平衡,否则您的研究会产生偏差。

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

答案 1 :(得分:0)

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