【问题标题】:Extracting the terminal nodes of each tree associated with a new observation提取与新观察相关联的每棵树的终端节点
【发布时间】:2013-01-18 13:35:39
【问题描述】:

我想提取随机森林 R 实现的终端节点。据我了解随机森林,您有一系列正交树。当您预测一个新的观察值(回归)时,它会进入所有这些树,然后对每棵树的预测进行平均。如果我不想平均,但可能对这些相应的观察结果进行线性回归,我需要一个与这个新观察结果“相关”的观察结果列表。我已经浏览了源代码,但还没有想出一种方法来获得它。谁能帮帮我?

【问题讨论】:

    标签: r regression linear-regression random-forest


    【解决方案1】:

    必须有更好的方法来做到这一点,但这里有一个解决方法:

    library(randomForest)
    set.seed(713)
    ## data
    my.df <- data.frame(x = rnorm(100), y = rnorm(100))
    ## forest
    rf <- randomForest(y ~ x, data = my.df, ntree = 10, keep.inbag = TRUE)
    

    keep.inbag = TRUE 保存用于拟合此示例中的 10 棵树中的每棵树的 inbag 观察结果

    predList <- lapply(seq_len(rf$ntree), function(z) 
                predict(rf, newdata = my.df[rf$inbag[, z] == 1, ], nodes = TRUE))
    

    nodes = TRUE 跟踪每个观察结束的终端节点。

    node.list <- lapply(seq_len(rf$ntree), function(z) 
                split(x = my.df[rf$inbag[, z] == 1, "x"], 
                        f = attr(predList[[z]], "nodes")[, z]))
    

    第一棵树的前三个终端节点:

    node.list[[1]][1:3]
    
    $`3`
    [1] 2.028358 2.071939
    
    $`7`
    [1] 0.8306559
    
    $`9`
    [1] 1.660134 1.621299
    

    【讨论】:

    • 一切都很完美。谢谢!
    猜你喜欢
    • 2020-12-13
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多