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