R:训练数据和测试数据具有相同的预测

R: Train data and test data have the same prediction

我正在尝试使用 lm 和预测函数来测试预测是否足够正确。原来train数据和test数据的预测是一样的

set.seed(1);
x = matrix(rnorm(300*100),300,100)
y = rnorm(300);
test.x = matrix(rnorm(300*100),300,100)
test.y = rnorm(300);

xy = data.frame(y, x)
fit = lm(y~x, xy)

x.df = data.frame(x)
pred1 = predict(fit, newdata=x.df)

test.x.df = data.frame(test.x)
pred = predict(fit, newdata=test.x.df)

sum(abs(pred1-pred))

lm() 中,您使用的是公式 y ~ x。尽管您的数据中有 y 列,但没有 x 列。因此,尽管 lm() 正在使用您所有的 x 列,但它的名称是错误的

names(fit$model)
[1] "y" "x"

每当您调用 predict() 使用该模型时,它将 return 模型的拟合值,因为它无法匹配列。

改为:

fit = lm(y ~ ., xy)

你会发现现在看起来不一样了:

names(fit$model)
[1] "y"    "X1"   "X2"   "X3"   "X4"   "X5"   "X6"   "X7"   "X8"   "X9"   "X10" 
... 
[100] "X99"  "X100"

最后,它将使用您在 newdata 参数中传递的数据:

sum(abs(pred1-pred))
[1] 196.9676