R randomForest:非终端的预测值?

时间:2015-05-13 15:15:23

标签: r random-forest

R randomForest的文档与getTree()方法的输出之间存在差异。

documentation表示getTree()中预测字段的值对于非终端节点应该为零:

  

预测:节点的预测;如果节点不是终端,则为0

这是分类方法的情况,但在回归方法中存在非零连续值:

> library(randomForest)
> 
> x  <- data.frame(matrix(rnorm(20), nrow=10))
> y  <- rnorm(10)
> 
> model <- randomForest(x,y)
> getTree(model,k=1)
  left daughter right daughter split var split point status prediction
1             2              3         2  0.49239435     -3 -0.1212934
2             4              5         2  0.09046437     -3 -0.4871480
3             0              0         0  0.00000000     -1  1.3421250
4             6              7         2 -0.61841853     -3 -0.2501163
5             0              0         0  0.00000000     -1 -1.1982434
6             0              0         0  0.00000000     -1 -0.8738258
7             0              0         0  0.00000000     -1  0.9973027

非终端节点的这些预测值是否用于预测?如果没有,他们的目的是什么?

在单独但相关的说明中,status字段不会遵循回归方法的文档:

  

status:status是节点终端(-1)或不是(1)

如前所述,分类方法似乎完全遵循文档:

> y_bin <- as.factor(y>0)
> model <- randomForest(x,y_bin)
> getTree(model,k=1)
  left daughter right daughter split var split point status prediction
1             2              3         2  -0.6184185      1          0
2             0              0         0   0.0000000     -1          1
3             4              5         1  -0.3887568      1          0
4             0              0         0   0.0000000     -1          1
5             0              0         0   0.0000000     -1          2

1 个答案:

答案 0 :(得分:0)

我已经通过测试用例确认了randomForest回归量的预测不依赖于预测字段中的决策节点值:

> x     <- data.frame(matrix(rnorm(20), nrow=10))
> y     <- rnorm(10)
> 
> model <- randomForest(x,y,ntree=1)
> getTree(model,k=1)
  left daughter right daughter split var split point status prediction
1             2              3         2  -0.1314179     -3 -0.1901029
2             0              0         0   0.0000000     -1 -1.6884260
3             4              5         2   1.0801034     -3  0.1844779
4             0              0         0   0.0000000     -1 -0.0447021
5             0              0         0   0.0000000     -1  0.4136579
> 
> test <- data.frame(X1=1,X2=1)
> predict(model,test)
         1 
-0.0447021 

我们可以通过跟踪数据点(1,1)来确定-0.0447021来自叶节点的值,如果数据点的值大于数据点,那么“right daughter”是正确的子节点。隔断。