【问题标题】:Difference of prediction results in random forest model随机森林模型中预测结果的差异
【发布时间】:2014-09-28 23:15:15
【问题描述】:

我已经建立了一个随机森林模型,当我编写两行不同的代码以生成预测时,我得到了两个不同的预测结果。我想知道哪一个是正确的。 这是我的示例数据框和使用的代码:

dat <- read.table(text = " cats birds    wolfs     snakes
      0        3        9         7
      1        3        8         4
      1        1        2         8
      0        1        2         3
      0        1        8         3
      1        6        1         2
      0        6        7         1
      1        6        1         5
      0        5        9         7
      1        3        8         7
      1        4        2         7
      0        1        2         3
      0        7        6         3
      1        6        1         1
      0        6        3         9
      1        6        1         1   ",header = TRUE)

我已经建立了一个随机森林模型:

model<-randomForest(snakes~cats+birds+wolfs,data=dat,ntree=20)
RF_pred<- data.frame(predict(model))
train<-cbind(train,RF_pred) # this gave me a predictive results named: "predict.model."

出于好奇,我用这行代码尝试了另一种语法:

dat$RF_pred<-predict(model,newdata=dat,type='response') # this gave me a predictive results named: "RF_pred"

令我惊讶的是,我得到了其他预测结果:

 dat
   cats birds wolfs snakes predict.model.  RF_pred
1     0     3     9      7       3.513889 5.400675
2     1     3     8      4       5.570000 5.295417
3     1     1     2      8       3.928571 5.092917
4     0     1     2      3       4.925893 4.208452
5     0     1     8      3       4.583333 4.014008
6     1     6     1      2       3.766667 2.943750
7     0     6     7      1       5.486806 4.061508
8     1     6     1      5       3.098148 2.943750
9     0     5     9      7       4.575397 5.675675
10    1     3     8      7       4.729167 5.295417
11    1     4     2      7       4.416667 5.567917
12    0     1     2      3       4.222619 4.208452
13    0     7     6      3       6.125714 4.036508
14    1     6     1      1       3.695833 2.943750
15    0     6     3      9       4.115079 5.178175
16    1     6     1      1       3.595238 2.943750

为什么会有差异。两者之间?哪一个是正确的? 有什么想法吗?

【问题讨论】:

  • 您从未在第一次定义 train(但您在 cbind 中引用它)——这可能是差异的根源。
  • 或者您的意思是“dat”?

标签: r random-forest


【解决方案1】:

区别在于预测的两个调用:

predict(model)

和

predict(model, newdata=dat)

第一个选项从随机森林中获取关于您的训练数据的袋外预测。在将预测值与实际值进行比较时,这通常是您想要的。

第二个将您的训练数据视为一个新数据集,并沿每棵树运行观察结果。这将导致预测值和实际值之间人为地密切相关,因为 RF 算法通常不会修剪单个树,而是依靠树的集合来控制过度拟合。因此,如果您想对训练数据进行预测,请不要这样做。

【讨论】:

  • 谢谢Hong Ooi,如果我想在新数据集上使用预测,我应该使用:predict(model, newdata=dat1) # dat1 是新数据集吗?跨度>
  • 如果您要预测真正的新数据,那么请使用predict(model, newdata=dat1)。
猜你喜欢
  • 2019-07-10
  • 2016-04-09
  • 2020-03-30
  • 2014-08-07
  • 2021-07-12
  • 2016-01-24
  • 2021-03-13
  • 2021-03-21
相关资源
最近更新 更多