2011-02-24 46 views
6

我對R很新,而且我被一個非常愚蠢的問題困住了。使用rpart在迴歸樹中搜索相應的節點

我正在校準一個迴歸樹,使用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方法分析節點,它可以幫助我理解結果。

+0

您是否嘗試過使用'STR()'探索你的對象呢? – 2011-02-24 10:47:06

+0

嗡嗡聲對哪些物體? – antoine 2011-02-25 14:13:47

回答

1

我想你想要的是type="vector"而不是class="prob"(我不認爲類是預測方法的接受參數),作爲軟件rpart文檔解釋說:

如果type =「矢量」 :預測的向量 響應。對於迴歸樹,這個 是節點處的平均響應,對於 泊松樹它是估計的 響應率,對於分類 樹是預測的類(作爲 數)。

11

Benjamin的答案不幸的是不工作:type="vector"仍然返回預測值。

我的解決方案非常棒,但我不認爲有更好的方法。訣竅是將模型框架中預測的y值替換爲相應的節點編號。

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

現在預測的輸出將是節點編號,而不是預測的y值。

(一注:以上在我的情況下tree是一個迴歸樹,而不是一個分類樹曾在分類樹的情況下,你可能需要省略as.numericas.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")