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

ant*_*ine 7 regression r decision-tree rpart cart-analysis

我对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))
Run Code Online (Sandbox Code Playgroud)

在校准了一个大的决策树之后,我希望,对于给定的数据样本,找到一些新数据的相应聚类(以及预测值).
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") 
Run Code Online (Sandbox Code Playgroud)

然而,通过这种predict方法,我只得到了我的新元素的预测比率,而我无法找到一种方法来获取我的新元素所属的决策树叶.

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

通过参数可以为预测方法提供多个class=参数,但对于回归树,所有参数似乎都返回相同的内容(决策树的目标属性的值)

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

通过该path.rpart方法分析节点,可以帮助我理解结果.

yuj*_*uji 12

不幸的是,本杰明的回答不起作用:type="vector"仍然返回预测值.

我的解决方案非常麻烦,但我认为没有更好的方法.诀窍是用相应的节点号替换模型帧中的预测y值.

tree2 = tree
tree2$frame$yval = as.numeric(rownames(tree2$frame))
predict = predict(tree2, newdata=validationData)
Run Code Online (Sandbox Code Playgroud)

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

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


Ben*_*min 1

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

如果类型=“向量”:预测响应的向量。对于回归树,这是节点的平均响应,对于泊松树,这是估计的响应率,对于分类树,这是预测的类别(作为数字)。