在使用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测试列拆分中解决此问题?
谢谢
答案 0 :(得分:0)
仅当数据具有很高的方差时,在非常小的测试集中,预测中可能会出现显着差异。我会说这是*不合要求的*。
首先分析您的数据集,然后您将通过基本的描述性统计信息(图形,位置和离散度的度量值等)查看造成这种差异的主要原因。之后,请增加测试集的大小,以使其达到平衡,否则您的研究会产生偏差。
但是从我看来,一切都很好,唯一的问题是符号e + 01
表示数字乘以10
答案 1 :(得分:0)
检查test_pred
的单位。它们都是x10
(由e+01
看到)。如果您设置numpy的打印设置以通过np.set_printoptions(suppress=True)
删除科学计数法,然后打印test_pred
,则应该看到它看起来与train_pred
非常相似。简而言之,没错。