【问题标题】:Search for corresponding node in a regression tree using rpart使用 rpart 在回归树中搜索相应的节点
【发布时间】:2011-07-03 10:20:53
【问题描述】:

我对 R 很陌生,遇到了一个非常愚蠢的问题。

我正在使用 rpart 包校准回归树,以便进行一些分类和一些预测。

多亏了 R,校准部分很容易做也很容易控制。

#the package rpart is needed
library(rpart)

# Loading of a big data file used for calibration
my_data <- read.csv("my_file.csv", sep=",", header=TRUE)

# Regression tree calibration
tree <- rpart(Ratio ~ Attribute1 + Attribute2 + Attribute3 + 
                      Attribute4 + Attribute5, 
                      method="anova", data=my_data, 
                      control=rpart.control(minsplit=100, cp=0.0001))

在校准大决策树后,我希望为给定的数据样本找到一些新数据的相应集群(以及预测值)。
predict 函数似乎非常适合这种需要。

# read validation data
validationData <-read.csv("my_sample.csv", sep=",", header=TRUE)

# search for the probability in the tree
predict <- predict(tree, newdata=validationData, class="prob")

# dump them in a file
write.table(predict, file="dump.txt") 

但是,使用predict 方法,我只能得到新元素的预测比例,而我无法找到获得新元素所属的决策树叶的方法。

我认为它应该很容易得到,因为 predict 方法必须找到叶子才能返回比率。

有几个参数可以通过class= 参数提供给 predict 方法,但是对于回归树来说似乎都返回相同的东西(决策树的目标属性的值)

有谁知道如何获取决策树中对应的节点?

通过path.rpart方法分析节点,有助于我理解结果。

【问题讨论】:

  • 您是否尝试过使用str()探索您的对象?

标签: r regression decision-tree rpart cart-analysis


【解决方案1】:

我认为您想要的是 type="vector" 而不是 class="prob"(我不认为 class 是 predict 方法的可接受参数),如 rpart 文档中所述:

if type="vector": 预测向量 回应。对于回归树,这 是节点的平均响应,对于 泊松树是估计的 响应率和分类 树它是预测的类(作为 号)。

【讨论】:

    【解决方案2】:

    不幸的是,Benjamin 的回答不起作用:type="vector" 仍然返回预测值。

    我的解决方案非常笨拙,但我认为没有更好的方法。诀窍是用相应的节点号替换模型框架中的预测 y 值。

    tree2 = tree
    tree2$frame$yval = as.numeric(rownames(tree2$frame))
    predict = predict(tree2, newdata=validationData)
    

    现在 predict 的输出将是节点数,而不是预测的 y 值。

    (请注意:以上方法适用于我的情况,其中tree 是回归树,而不是分类树。在分类树的情况下,您可能需要省略as.numeric 或将其替换为as.factor .)

    【讨论】:

      【解决方案3】:

      你可以使用partykit包:

      fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
      
      library("partykit")
      fit.party <- as.party(fit)
      predict(fit.party, newdata = kyphosis[1:4, ], type = "node")
      

      对于您的示例,只需设置

      predict(as.party(tree), newdata = validationData, type = "node")
      

      【讨论】:

        猜你喜欢
        • 2017-09-26
        • 1970-01-01
        • 2017-06-22
        • 2015-10-28
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        相关资源
        最近更新 更多