【问题标题】:R: Train data and test data have the same predictionR:训练数据和测试数据具有相同的预测
【发布时间】:2018-04-03 06:44:25
【问题描述】:

我正在尝试使用 lm 和 predict 函数来测试预测是否足够正确。事实证明,训练数据和测试数据具有相同的预测。

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))

【问题讨论】:

    标签: r lm predict


    【解决方案1】:

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

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

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

    改成:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-01-10
      • 2021-02-28
      • 2020-06-26
      • 1970-01-01
      • 2018-08-19
      • 2017-04-05
      • 2017-02-20
      • 2015-04-21
      • 2023-03-12
      相关资源
      最近更新 更多