首页 文章

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

提问于
浏览
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 方法,我只得到我的新元素的预测比率,我找不到一种方法获得我的新元素所属的 decision tree leaf .

我认为它应该很容易获得,因为预测方法 must 已经发现叶子以返回比率 .

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

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

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

3 回答

  • 2

    Benjamin 's answer unfortunately doesn' t work: type="vector" 仍然返回预测值 .

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

    tree2 = tree
    tree2$frame$yval = as.numeric(rownames(tree2$frame))
    predict = predict(tree2, newdata=validationData)
    

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

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

  • 1

    您可以使用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")
    
  • 12

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

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

相关问题