使用 rpart 在回归树中搜索相应的节点

Posted

技术标签:

【中文标题】使用 rpart 在回归树中搜索相应的节点【英文标题】:Search for corresponding node in a regression tree using 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()探索您的对象? 【参考方案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")

【讨论】:

以上是关于使用 rpart 在回归树中搜索相应的节点的主要内容,如果未能解决你的问题,请参考以下文章

如何在 rpart 回归树图中将绘制的数字从科学计数法更改为标准形式?

如何在回归树中计算特征重要性?

rpart:分类与连续回归量的计算时间

R中常用数据挖掘算法包

matlab中的回归树

更改 R 方图中的标签位置(决策/回归树)