7

我对 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方法分析节点,这将有助于我理解结果。

4

3 回答 3

13

不幸的是,本杰明的回答不起作用: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。)

于 2011-06-21T19:15:06.957 回答
2

您可以使用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")
于 2016-06-06T12:35:35.523 回答
1

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

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

于 2011-03-10T18:21:31.477 回答