我对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方法,我只得到了新元素的预测比率,并且找不到一种方法可以得到决策树叶,而新元素属于那里。
我认为这应该很容易得到,因为必须的预测方法已经找到了叶来返回这个比率。
有几个参数可以通过class=参数提供给预测方法,但是对于回归树,似乎都返回相同的东西(决策树的目标属性的值)。
有人知道如何在决策树中获得相应的节点吗?
通过使用path.rpart方法分析节点,可以帮助我理解结果。
发布于 2011-06-21 19:15:06
不幸的是,本杰明的答案行不通:type="vector"仍然返回预测值。
我的解决办法很简单,但我不认为有更好的办法。诀窍是用相应的节点数替换模型帧中的预测y值。
tree2 = tree
tree2$frame$yval = as.numeric(rownames(tree2$frame))
predict = predict(tree2, newdata=validationData)现在,预测的输出将是节点数,而不是预测的y值。
(注意:在我的例子中,tree是一棵回归树,而不是分类树。)对于分类树,您可能需要省略as.numeric或用as.factor替换它。)
发布于 2016-06-06 12:35:35
您可以使用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")发布于 2011-03-10 18:21:31
我认为您想要的是type="vector"而不是class="prob" (我不认为类是预测方法的可接受参数),正如rpart中所解释的那样:
If type=“向量”:预测响应的向量。对于回归树,这是节点的平均响应,对于泊松树是估计的响应率,对于分类树是预测的类(作为一个数字)。
https://stackoverflow.com/questions/5102754
复制相似问题