rpart を使用して、選択関数に oneSE オプションを使用して、caret パッケージ内で回帰ツリー分析を実行しています。そうするとき、多くの場合、分割がゼロのモデルになってしまいます。どのモデルよりも優れたモデルはないことを示唆しています。これは起こっているべきですか?
次に例を示します。
# 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 が最小のモデルの 1 SD 以内にある最小のツリーを見つけようとしています。これは、Venebles と Ripley で提唱されている 1-SE アプローチに似ています。この場合、説明力がないにもかかわらず、分割のないモデルを選択するのは行き詰まっているようです。
これは正しいですか?これでよろしいですか?分割のないモデルの選択を禁止するルールが必要なようです。