質問:
rpartの複雑さパラメーターの混乱
Ben Gorman
2014-08-25 07:27:55 UTC
view on stackexchange narkive permalink

rpart オブジェクトの概要でのCPの計算について少し混乱しています。

この例を見てください

  df <- data.frame(x = c(1、2、3、3、3)、y = factor(c( "a"、 "a"、 "b"、 "a"、 "b"))、 method = "class")mytree<-rpart(y〜x、data = df、minbucket = 1、minsplit = 1)summary(mytree)Call:rpart(formula = y〜x、data = df、minbucket = 1、minsplit = 1)n = 5 CP nsplitrelエラーxerrorxstd1 0.50 0 1.0 1 0.54772262 0.01 1 0.5 20.4472136変数の重要度x100ノード番号1:5の観測値、複雑さparam = 0.5予測クラス=予想損失= 0.4P(ノード)= 1クラス数:3 2確率:0.6000.400左息子= 2(2 obs)右息子= 3(3 obs)一次分割:x < 2.5左、改善= 1.066667、(0欠落) 

ルートノードの場合、要素を誤って分類する可能性があるため、CPは0.4である必要があると思います。ルートは0.4で、ルートのツリーサイズは0です。0.5はどのように正しいCPですか?

四 答え:
Fernando Carrillo
2015-02-19 21:27:48 UTC
view on stackexchange narkive permalink

複雑度パラメーター$ \ alpha $は、ツリー$ C(T)$のコストがターミナルノードの数$ | T | $によってどのようにペナルティを受けるかを指定し、正規化されたコスト$ C _ {\ alpha}(T )$( http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf、セクション4を参照)。

$ C _ {\ alpha}(T)= C(T)+ \ alpha | T | $

$ \ alpha $が小さいと、ツリーが大きくなり、過剰適合の可能性があります。$が大きい小さな木と潜在的な過適合の\ alpha $。

joran
2014-09-16 20:59:35 UTC
view on stackexchange narkive permalink

私が知る限り、複雑さのパラメーターはその特定のノードのエラーではありません。これは、そのノードが相対誤差を改善した分割の量です。したがって、あなたの例では、元のルートノードを分割すると相対誤差が1.0から0.5に低下したため、ルートノードのCPは0.5になります。次のノードのCPはわずか0.01です(これは、分割を検討するタイミングを決定するためのデフォルトの制限です)。そのため、そのノードを分割しても0.01の改善しか得られなかったため、ツリーの構築はそこで停止しました。

返信ありがとうございます(私は1つが来るとは思っていませんでした)。こちらのビネットの25ページの上部にある式を参照してください。http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf何かが足りない場合を除いて、CPはサブツリーごとに測定されます。、Tは、ルートから高さ| T |で始まります。このようなサブツリーごとに、CP = T + cp * | T |の要素を誤分類する確率*ルート内の要素を誤って分類する確率。この式は、同じ分類エラーがある場合でも、高さk +1のツリーが高さkのツリーよりも高いCPを持つように強制するため意味があります。
したがって、これがrpartパッケージのバグではないと私はまだ確信していません。しかし、論理を間違えただけでも驚かないでしょう。
@BenGorman 17〜18ページ、特に箇条書き、特に最後の箇条書きを参照してください。そのテーブルのcpエラー列とrelエラー列の関係は偶然ではなく、スケーリングはおそらく両方の理解が正しいことを意味します。
ああ、その洞察に感謝します。私は今それを持っていると思います。
Alan Chalk
2016-07-11 22:37:52 UTC
view on stackexchange narkive permalink

分類のためにrpartの計算に従うことは特に簡単ではありません。さらに、「Long Intro」は、分類にginiを使用することを示唆していますが、コストの複雑さのプルーニング(したがって、cpの値)は、giniではなく精度に基づいて報告されているようです。この場合、計算を実行して、元の質問で照会された0.4を複製できます。まず、ツリーを作成します

  df <- data.frame(x = c(1,2,3,3,3)、y = factor(c( "a"、 "a" 、 "b"、 "a"、 "b")))mytree <- rpart(y〜x、data = df、minbucket = 1、minsplit = 1、method = "class") 

次に入力

  print(mytree) 

get

  node)、split、n、損失、yval、(yprob)1)ルート5 2 a(0.6000000 0.4000000)2)x< 2.5 2 0 a(1.0000000 0.0000000)* 3)x> = 2.5 3 1 b(0.3333333 0.6666667)*  

「loss」列はginiではありません(予想していたかもしれません)。これは、発生したエラーの数です。

この1つの分割ツリーが(精度に基づいて)崩壊するポイントは、

$$ 2 + \ alpha * 1 = 1 + \ alpha * 2 $$ pのときです。 >

(上記の最初の2つは剪定されたツリーの損失で、次の2つは完全なツリーのターミナルノードの数です)。

アルファを解くと、アルファは1になります。

上記の回答で述べたように、cptableでは、一番上の行のエラーが1にスケーリングされ、次にcpが同じ量だけスケーリングされます。一番上の行のエラーは、のエラーの数です。分割のないツリー、つまり2。したがって、1のアルファは2で割って0.50になります。

rpartのCコードを読み取るのは難しいですが、上記は私が思うことです。やっています。

Ilias Liapikos
2017-12-14 18:36:51 UTC
view on stackexchange narkive permalink

@joranと@fernandoの両方の回答をさらに検証し、私のような誰かがrpartオブジェクトのcp行列を解釈する方法をさらに明確にするのを助けるために書いています。次のコードを観察すると、分類木に、独自の損失マトリックスを導入する2つの可能な結果を​​適合させたことがわかります(FNはFPの2倍のコストです)。

 分類ツリー:
rpart(formula = Result〜。、data = data、method = "class"、parms = list(loss
= PenaltyMatrix))

ルートノードエラー:174/343 = 0.50729

n = 343

    CP nsplitrelエラーxerrorxstd
1 0.066092 0 1.00000 0.50000 0.046311
2 0.040230 2 0.86782 0.73563 0.065081
3 0.034483 4 0.78736 0.91379 0.075656
4 0.022989 5 0.75287 1.01149 0.080396
5 0.019157 7 0.70690 1.17241 0.086526
6 0.011494 10 0.64943 1.21264 0.087764
7 0.010000 12 0.62644 1.31609 0.090890
 

たとえば、マトリックスのステップ6を観察すると、分割の数が3(7から10)増加し、相対誤差が 0.64943 になっていることがわかります。ここで、前のステップのそれぞれのエラーからこのエラーを差し引くと、 0.05747 の改善が見られます。これは、ステップ5〜6の間の追加の分割数(3つ)で割ると次のようになります。 )結果は約 0.01957 になります。これは、ステップ5の複雑さのパラメーターです。これはすべてのステップ間で検証できます!

では、コミュニティに向けて2つの質問があります。

  • ツリーのサイズが大きくなるにつれてxerrorが継続的に増加することは、どういう意味ですか?

  • いわゆる経験則に従う場合、ツリーの1標準偏差内でxerrorがあり、テーブル全体でxerrorが最小である最小サイズのツリーを選択する必要があります。私の場合、これはステップ2のツリーになります(これはxerrorが最小で、0.73563 + 0.065081 = 0.800711であり、テーブル内の他のツリーでは満たされていません)。これは正しいですか?



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...