从R中的randomForest模型中提取或添加原始数据值

4
我有一份在R中生成的randomForest模型,但我没有用于创建该模型的原始数据。最终,我的目标是增加用于创建该模型的原始数据集以扩大模型的样本量。
我能想到两种方法来实现这一目标:1)直接向原模型添加数据。我尝试使用?update命令进行添加,但似乎并不像我想象的那样工作。下面的代码创建了一个非常简单的随机森林,然后尝试通过附加x和y数据来更新公式,但查看str结果时可以明显看出没有添加任何内容。
x <- 1:10
y <- 2:11
z <- 3:12
mod <- randomForest(z~x+y)
str(mod)

test <- cbind(runif(100,0,10),runif(100,0,10),runif(100,100,1000))
colnames(test) <- c("x","y","z")

mod2 <- update(mod,.~., test)
str(mod2)

从文档中看,似乎需要原始数据来更新?

2)以某种方式从模型对象中获取原始数据。这不是最理想的方法,但如果我这样做,我可以简单地将数据附加到原始数据并重建模型。randomforest对象通过(mod $ y)具有原始响应变量z,但我不认为它具有原始的x和y值。但是,它确实拥有整个森林。

如果不清楚,请见谅。


欢迎来到 Stack Overflow!我无法执行您的代码,请问函数“randomForest”来自哪个包? - akraf
从快速查看来看,我认为两个选项都不可行。update仅更新调用,即公式,而不是数据--它需要原始数据并将重新拟合到这些数据。如果您删除原始的x、y和z对象,您会发现update函数失败了。对于选项2,randomForest对象不包含原始数据。 - jmuhlenkamp
这个库是randomForest。 - thuja
感谢您的回复,jmuhlenkamp。我同意这似乎不可能,至少不是以直接的方式。奇怪的是,原始响应变量在随机森林模型对象和整个森林中,但原始预测变量却不在其中(至少看起来是这样)......或者说,即使使用整个森林,也无法通过新的x、y和z进行更新。太糟糕了,也许有更聪明的方法。 - thuja
1个回答

0

我曾经有一个类似的问题(这也是我偶然发现这篇文章的原因),最终我找到了答案。

正如@jmuhlenkamp所提到的,randomForest对象不包含原始数据。但是,您可以从用于创建对象的调用中提取数据。

以下是一个示例:

require(randomForest)
data(iris)
rf = randomForest(Species~., data=iris)
data_name = getCall(rf)$data
iris_again = eval(data_name)

然后,您可以根据需要使用update更新公式,然后提供一个新的(在您的情况下修改过的)数据集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接