【问题标题】:R multiple regression predict output has more values than contained in the test setR 多元回归预测输出的值多于测试集中包含的值
【发布时间】:2018-01-13 18:37:48
【问题描述】:

我正在尝试在某个数据集中训练和测试线性回归模型

以下是训练数据集的头部

> head(TaxiTrain)
         id vendor_id     pickup_datetime    dropoff_datetime passenger_count
1 id2875421         2 2016-03-14 17:24:55 2016-03-14 17:32:30               1
2 id2377394         1 2016-06-12 00:43:35 2016-06-12 00:54:38               1
3 id3858529         2 2016-01-19 11:35:24 2016-01-19 12:10:48               1
4 id3504673         2 2016-04-06 19:32:31 2016-04-06 19:39:40               1
5 id2181028         2 2016-03-26 13:30:55 2016-03-26 13:38:10               1
6 id0801584         2 2016-01-30 22:01:40 2016-01-30 22:09:03               6
  pickup_longitude pickup_latitude dropoff_longitude dropoff_latitude
1        -73.98215        40.76794         -73.96463         40.76560
2        -73.98042        40.73856         -73.99948         40.73115
3        -73.97903        40.76394         -74.00533         40.71009
4        -74.01004        40.71997         -74.01227         40.70672
5        -73.97305        40.79321         -73.97292         40.78252
6        -73.98286        40.74220         -73.99208         40.74918
  store_and_fwd_flag trip_duration
1                  N           455
2                  N           663
3                  N          2124
4                  N           429
5                  N           435
6                  N           443

训练集,包含 1458644 行

测试集与训练集类似,除了 2 列

head(Taxitest)
         id vendor_id     pickup_datetime passenger_count pickup_longitude
1 id3004672         1 2016-06-30 23:59:58               1        -73.98813
2 id3505355         1 2016-06-30 23:59:53               1        -73.96420
3 id1217141         1 2016-06-30 23:59:47               1        -73.99744
4 id2150126         2 2016-06-30 23:59:41               1        -73.95607
5 id1598245         1 2016-06-30 23:59:33               1        -73.97021
6 id0668992         1 2016-06-30 23:59:30               1        -73.99130
  pickup_latitude dropoff_longitude dropoff_latitude store_and_fwd_flag
1        40.73203         -73.99017         40.75668                  N
2        40.67999         -73.95981         40.65540                  N
3        40.73758         -73.98616         40.72952                  N
4        40.77190         -73.98643         40.73047                  N
5        40.76147         -73.96151         40.75589                  N
6        40.74980         -73.98051         40.78655                  N

测试集包含 625134 个观测值

现在我面临两个问题。我已经训练了一个线性回归模型:

lm1 <- lm(trip_duration ~ passenger_count, data = TaxiTrain)

这会在训练集上训练线性回归模型。当我在测试集上安装它时,我使用以下代码。

lm2 <- predict(lm1, data = Taxitest) 

我得到 1458644 个观察值(与训练集相同)。我应该得到 625134 个预测

我不确定错误在哪里。我请人澄清

【问题讨论】:

  • 当你的数据集都没有那么多时,你得到了 1458644 个观察结果,这对我来说似乎很可疑。这表明您的训练数据集有 1458644 个观察值,而不是您提到的 1457644 个。
  • 我明白了。它是 Kaggle 上的一个数据集。我过去曾运行过预测功能并且没有遇到任何问题。上周出现了这种情况。我也尝试过重新安装 R。没有影响
  • 我的错误。训练集中的行数也是1458644。预测函数的输出给出相同的-1458644。
  • 太棒了。在下面检查我的答案。我想它会解决你的问题。
  • 哇。那很整洁,我认为它已经解决了这个问题。非常感谢您,先生。我已经为此苦苦挣扎了好几个星期了。

标签: r output regression rows


【解决方案1】:

尝试改用lm2&lt;-predict(lm1, newdata=Taxitest)

使用?predict.lm 检查此命令的工作原理。如果您不使用newdata=,它将在您用于训练模型的数据集上进行预测。

如下所示:

# train and test sets
dt1 = mtcars[1:15,]
dt2 = mtcars[20:23,]

# build the model
lm = lm(disp ~ drat, data = dt1)

# check the differences / similarities
predict(lm, data=dt2)
predict(lm, newdata=dt2)
predict(lm, dt2)

【讨论】:

  • data =predict 命令中不起作用。它仅适用于newdata=。我会更正你提到的那件事。听起来很合理... :)
  • 嗯..有趣。所以它不会抱怨data = 并在正确的参数是newdata = 时错误地运行它?
  • 确实不会抱怨。它只是忽略它。喜欢使用predict(lm)
  • 好的。恩迪亚弗恩。很好的收获:)
  • 确实是文件! :D 通常我会尝试将预测作为新列添加到我的测试数据集中,这就是为什么我一直设法捕捉到这个错误(即不同的长度)。否则你很可能会错过它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2016-03-17
  • 2015-07-11
  • 2016-11-10
  • 2017-04-15
  • 2017-11-26
  • 2020-04-24
相关资源
最近更新 更多