使用 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 在回归树中搜索相应的节点的主要内容,如果未能解决你的问题,请参考以下文章