2013-10-30 54 views
0

我正在使用rpart在插入程序包內使用oneSE選項對選擇函數執行迴歸樹分析。當我這樣做時,我最終會得到一個零分模型。這表明沒有任何模式比任何模式都好。這是否應該發生?rpart模型崩潰爲零插入的光標

下面是一個例子:

# set training controls 
tc <- trainControl("repeatedcv", repeats=100, selectionFunction="oneSE", num=10) 

# run the model 
mod <- train(yvar ~ ., data=dat, method="rpart", trControl=tc) 

# it runs..... 
# look at the cptable of the final model 
printcp(mod$finalModel) 

這裏的模型輸出:

> mod 
No pre-processing 
Resampling: Cross-Validation (10 fold, repeated 100 times) 

Summary of sample sizes: 81, 79, 80, 80, 80, 80, ... 

Resampling results across tuning parameters: 

    cp  RMSE Rsquared RMSE SD Rsquared SD 
    0.0245 0.128 0.207  0.0559 0.23  
    0.0615 0.127 0.226  0.0553 0.241  
    0.224 0.123 0.193  0.0534 0.195  

RMSE was used to select the optimal model using the one SE rule. 
The final value used for the model was cp = 0.224. 

這裏的printcp的輸出:

Variables actually used in tree construction: 

character(0) 
Root node error: 1.4931/89 = 0.016777 
n= 89 
CP nsplit rel error 
1 0.22357  0   1 

但是,如果我只是直接在運行模型rpart,我可以看到更大的,未修剪的樹,被修剪成上面所說的更簡約的模型:

unpruned = rpart(yvar ~., data=dat) 
printcp(unpruned) 

Regression tree: 
rpart(formula = yvar ~ ., data = dat) 

Variables actually used in tree construction: 
[1] c.n.ratio Fe.ppm K.ppm  Mg.ppm NO3.ppm 

Root node error: 1.4931/89 = 0.016777 

n= 89 

    CP nsplit rel error xerror xstd 
1 0.223571  0 1.00000 1.0192 0.37045 
2 0.061508  2 0.55286 1.1144 0.33607 
3 0.024537  3 0.49135 1.1886 0.38081 
4 0.010539  4 0.46681 1.1941 0.38055 
5 0.010000  6 0.44574 1.2193 0.38000 

插入符號[我認爲]試圖找到RMSE在最低RMSE模型的1 SD內的最小樹。這與Venebles和Ripley倡導的1-SE方法類似。在這種情況下,即使它沒有解釋力,它似乎也會陷入沒有分裂的模式中。

這是正確的嗎?這個可以嗎?似乎應該有一條規則來防止選擇沒有拆分的模型。

回答

0

嘗試刪除selectionFunction="oneSE"

這應該確定具有最小可能錯誤的深度。在這樣做的時候,從選擇最小觀測RMSE來看,存在一些「優化偏差」的可能性,但是我發現在實踐中很小。

最大

+0

感謝您的回覆最大。使用selectionFunction =「最佳」選項似乎並沒有真正解決我所遇到的結果。也許還有另外一種方法來問這個問題......有沒有辦法讓rpart最初嘗試更多的代理拆分,這樣它就不會掛在最初的拆分上?在某些情況下,我可以將其他變量添加到數據集中,並獲取一個樹模型,該模型的初始分裂是來自未能生成樹的原始池中的變量之一。 – Guillemot