1

これに似た問題があるため、rpart に 1 つの分割を強制しようとしています。私の問題を再現するおもちゃの例を次に示します。

require(rpart)

y <- factor(c(1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
x1 <- c(12,18,15,10,10,10,20,6,7,34,7,11,10,22,4,19,10,8,13,6,7,47,6,15,7,7,21,7,8,10,15)
x2 <- c(318,356,341,189,308,236,290,635,550,287,261,472,282,262,1153,435,402,182,415,544,251,281,378,498,142,566,152,560,284,213,326)

data <- data.frame(y=y,x1=x1,x2=x2)
tree <-rpart(y~.,
              data=data,
              control=rpart.control(maxdepth=1, # at most 1 split
                                    cp=0, # any positive improvement will do
                                    minsplit=1,
                                    minbucket=1, # even leaves with 1 point are accepted
                                    xval=0)) # I don't need crossvalidation
length(tree$frame$var) #==1, so there are no splits

1 つのポイントを分離することは可能 (minbucket=1) であり、最もわずかな改善 (1 つのポイントを分離すると常に誤分類率が減少する) でさえ、分割が維持される (cp=0) につながるはずです。

結果に分割が含まれないのはなぜですか? また、常に正確に 1 つの分割を取得するには、コードをどのように変更する必要がありますか? 両方が同じ因子出力に分類される場合、分割が保持されない可能性はありますか?

4

1 に答える 1

3

cp = 0 を cp = -1 に変更します。

どうやら最初の分割 (maxdepth = 3) の cp は 0.0000000 です。したがって、負になると、maxdepth = 1 で表示されます。

于 2015-03-06T16:27:54.143 に答える