2015-01-09 13 views
6

Rパッケージrpartでは、決定木のCPテーブル内に表示されるツリーのサイズはどのように決定されますか?以下の例では、CPテーブルはデフォルトで、1,2ノード、5ノードのツリーのみを表示します(それぞれnsplit = 0,1,4)。rpartのCPテーブルによって与えられるツリーサイズ

library(rpart) 
fit <- rpart(Kyphosis ~ Age + Number + Start, method="class", data=kyphosis) 
> printcp(fit) 

Classification tree: 
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis, 
method = "class") 

Variables actually used in tree construction: 
[1] Age Start 

Root node error: 17/81 = 0.20988 

n= 81 

     CP nsplit rel error xerror xstd 
1 0.176471  0 1.00000 1.00000 0.21559 
2 0.019608  1 0.82353 0.94118 0.21078 
3 0.010000  4 0.76471 0.94118 0.21078 

提示する木のどのようなサイズを決定するために使用する固有のルールrpart()はありますか? printcp()に、ツリーのすべての可能なサイズのクロスバリデーション統計を返すことが可能ですか?つまり、上記の例では、3ノードと4ノードのツリー(nsplit = 2,3)の行も含めますか?

答えて

3

rpart()機能は、rpart.control()機能を使用して制御されます。より多くの観測値があるときに分割する関数と、指定された値がcpであることを伝えるminsplitのようなパラメータがあり、全体的な不足がcpのファクタだけ減少した場合にのみ分割するように指示します。 上記の例でsummary(fit)を見ると、すべての値がnsplitの統計情報が表示されます。 printcp(fit)を使用してこれらの値を印刷するには、元のrpart関数を呼び出すときに、cpminsplitの適切な値を選択する必要があります。

+0

あなたの答えをありがとう、私は 'minsplit'と' cp'は、相互検証を試みる前に、木の成長に使用されるパラメーターであるという印象の下にあった - むしろ後でそれをプルーニングよりも、どのような私であります質問とCPテーブルは参照してください。上記の出力がnsplit = 0、1、4を表示し、 'minsplit'と' cp'の適切な値がnsplit = 0,1,2,3,4という値を提示しているのではないかと誤解していたら、 4? ちなみに、 'summary(fit)'はnsplitのすべての値についてクロスバリデーションの統計情報を与えませんでした。CPテーブルは質問と同じです。 – alopex

1

rpartのcran-rドキュメントには、rpart関数にオプションcp = 0が追加されています。 http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf また、分割の数を制御するためにrpart関数に与えることができる他のオプションについても言及しています。

dfit <- rpart(y ~ x, method='class', 
      control = rpart.control(xval = 10, minbucket = 2, **cp = 0**)) 
+1

あなたの答えをありがとう、しかし、上記のように、私は 'minbucketと' cpは木の成長に影響を与えるだけで、後で来る相互検証プルーニングではないと信じています。この場合、 'control = rpart.control(cp = 0)'を追加しても、質問に表示されるCPテーブルは変更されませんでした。 – alopex

+0

すべての分割を表示するオプションを増やす方法がわかりません。スプリットで追加の利益がない限り、rpartはそれを出力に含めるとは思わない。また、脊柱後弯症はわずか81のobsを有する小さなデータセットである。以下のオプションを使用してCPプロットが表示された場合、X相対誤差は1と3の間にあまりないため、nsplit = 2は完全に考慮されません。 (fit2) rsq.rpart(fit2):fit2 < - rpart(虚偽〜年齢+番号+開始、データ=後脚症、 method = "クラス"、control = rpart.control(minsplit = 8) –

関連する問題