2


R ツリー モデルに関する簡単な質問です。多くの変数 (主に数値変数または因子変数) でツリー モデルを作成したいと考えています。変数の 1 つはGenderで、カテゴリはmale、femaleunknownです。andライブラリのtreeorrpart関数を使用すると、 Genderルートから 2 つのブランチしか得られません。不明な性別は、女性とグループ化されて 1 つのカテゴリを形成しています。だから私が得ているブランチはFemale+UnknownMaleです。ツリーパッケージのpdf http://cran.r-project.org/web/packages/tree/tree.pdfをチェックしたところ、treerpart順序付けられていない因子のレベルは、2 つの空でないグループに分けられます。rpart 関数は、3 水準以上の因子を処理するという点で、tree 関数に非常に似ているように見えます。

したがって、私の質問は、単一のノードから 3 つ以上のブランチを生成できるようにする R の他の関数またはパッケージがあるか、または同じことを行う他のオープン ソース ツールに関する提案があるかどうかです。さらに情報が必要な場合はお知らせください。

4

1 に答える 1

2

rpart()2 つ以上のカテゴリの応答を完全に処理できます。試す:

require(rpart)
mod <- rpart(Species ~ ., data = iris)
mod
plot(mod)
text(mod)

デフォルト設定を使用して実行すると、3 つのターミナル ノードを持つツリーが生成されます。

R> mod
n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

    1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
      2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
      3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
        6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259) *
        7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) *

再帰的パーティショニング アルゴリズムは、特定の停止ルールが満たされるとツリーの構築を停止します (ノードが [単一のクラスの] 純粋な場合、ポイント分割はありません。デフォルトでは、ノードは分割されるために 20 以上の観測値を持っている必要があります。 、また、特定のノードの観測値が 7 未満の場合、またはそれ以上分割しない場合は、適合の欠如が 0.01 倍に改善されるなど)、そのノードの分割を停止します)。これらの一部は、rpart.control()関数から制御できます。

あなたが私たちに提供した限られた情報から、これらのデフォルトはあなたのデータセットには不適切であり、それに応じて調整する必要があると結論付けることができます.

ctrl <- rpart.control(minsplit = 2, minbucket = 1, cp = 0.00001)
mod2 <- rpart(Species ~ ., data = iris, control = ctrl)
mod2
plot(mod2)
text(mod2)

この例のデータセットでは、はるかに大きなツリーが生成されます。

R>     mod2
n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
   2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
   3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
     6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259)  
      12) Petal.Length< 4.95 48   1 versicolor (0.00000000 0.97916667 0.02083333)  
        24) Petal.Width< 1.65 47   0 versicolor (0.00000000 1.00000000 0.00000000) *
        25) Petal.Width>=1.65 1   0 virginica (0.00000000 0.00000000 1.00000000) *
      13) Petal.Length>=4.95 6   2 virginica (0.00000000 0.33333333 0.66666667)  
        26) Petal.Width>=1.55 3   1 versicolor (0.00000000 0.66666667 0.33333333)  
          52) Sepal.Length< 6.95 2   0 versicolor (0.00000000 1.00000000 0.00000000) *
          53) Sepal.Length>=6.95 1   0 virginica (0.00000000 0.00000000 1.00000000) *
        27) Petal.Width< 1.55 3   0 virginica (0.00000000 0.00000000 1.00000000) *
     7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087)  
      14) Petal.Length< 4.85 3   1 virginica (0.00000000 0.33333333 0.66666667)  
        28) Sepal.Length< 5.95 1   0 versicolor (0.00000000 1.00000000 0.00000000) *
        29) Sepal.Length>=5.95 2   0 virginica (0.00000000 0.00000000 1.00000000) *
      15) Petal.Length>=4.85 43   0 virginica (0.00000000 0.00000000 1.00000000) *

しかし、データに過剰に適合している可能性が最も高いです。

rpart()とは言うものの、もちろん、 2 つ以上のレベルで応答を処理できるように、ツリーをデータセットに適合させることができる他のパッケージがあります。主なものは CRAN のMachine Learning & Statistical Learning Task View にリストされているので、参照してください。そのようなパッケージの 1 つがpartyです。

于 2012-09-21T08:40:55.833 に答える