2013-08-23 29 views
2

我已經通過party包使用ctree函數構建了一個決策樹。它有1700個節點。 首先,有沒有辦法在ctree中給出maxdepth的說法?我試過control_ctree選項,但是,它拋出了一些錯誤消息,說不能找到ctree函數。如何實現使用ctree(party package)構建的決策樹的輸出?

另外,我怎樣才能消耗這棵樹的輸出?它如何在SAS或SQL等其他平臺上實現。我還懷疑節點末尾的值"* weights = 4349 "是什麼意思。我怎麼知道哪個終端節點爲哪個預測值投票。

+0

請首先簡化您的問題,舉例說明您在R控制檯中實際編寫了哪些功能。 – Aashu

+0

庫(方) train.treeM1 <-ctree(U_ACTIVITY_FLAG_STATUS_3〜 U_ARPU_M1 + U_RCHRG_CNT_M1 + U_LOCAL_TOT_MOU_M1 + U_OG_CALL_CNT_M1 + U_OG_AVG_CALL_DURATION_M1 + U_IC_CALL_CNT_M1 + U_IC_AVG_CALL_DURATION_M1 + U_DED_RECHARGE_RATIO + U_Advanced_Handset_Ratio + U_Retailer_Baby_Care_Ratio + U_Retailer_Born_Dead_Ratio, 數據= traindata) 表(traindata $ U_ACTIVITY_FLAG_STATUS_3,預測(train.treeM1)) #plot(火車。treeM1,type =「simple」) #plot(train.treeM1) #summary(train.treeM1) –

+0

這是我用過的代碼,它創建了一棵樹。現在我想要用下面提到的格式的SAS/SQL來實現這棵樹的oputput。 –

回答

2

ctree中有一個maxdepth選項。它位於ctree_control()

你可以用它如下

airq <- subset(airquality, !is.na(Ozone)) 
airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(maxdepth = 3)) 

您還可以限制分割大小和桶的大小是「不低於」

airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(minsplit= 50, minbucket = 20)) 

你也可以以降低增加的感應度並降低P值

airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(mincriterion = 0.99)) 

該你提到的只是該特定節點中觀察的數量。 ctree默認給每個觀測權重1,但如果您覺得您的觀測值得更大權重,您可以向ctree()添加一個權重向量,其長度必須與數據集相同並且必須是非負整數。當你這樣做後,weights = 4349必須謹慎解釋。

使用weights的一種方法是查看哪些觀察值落在某個節點中。在本例中使用的數據上面我們可以執行以下

airq <- subset(airquality, !is.na(Ozone)) 
airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(maxdepth = 3)) 
unique(where(airct)) #in order the get the terminal nodes 
[1] 5 3 6 9 8 

,所以我們可以爲您在節點數量5掉下例如

n <- nodes(airct , 5)[[1]] 
x <- airq[which(as.logical(n$weights)), ] 
x 
    Ozone Solar.R Wind Temp Month Day 
1  41  190 7.4 67  5 1 
2  36  118 8.0 72  5 2 
3  12  149 12.6 74  5 3 
4  18  313 11.5 62  5 4 
... 

使用這種方法,您可以創建數據集將包含你終端節點的信息N,然後將其導入到SAS或SQL

您也可以使用從我的回答如下 ctree() - How to get the list of splitting conditions for each terminal node?

功能拆分條件列表