2015-05-13 3 views
1

Существует несоответствие между документацией для R randomForest и выходом метода getTree().R randomForest: значения предсказания для не-терминалов?

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 поле не прилипают к документации по методу регрессии либо:

статус: является терминальным узлом (-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 

ответ

0

I «В подтвержден тест, что прогноз для 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 

Мы можем подтвердить, что -0,0447021 этого значения из узла листа путем отслеживания точка данных (1,1) вниз по дереву, где «правая дочь» является правильным дочерним узлом, если значение из точки данных больше, чем отсечка.