7

rpart各行のモデルのターミナル ノードの ID (または名前) を取得するにはどうすればよいですか? predict.rpart予測されたクラス (数または因子)、クラス確率、またはtype="matrix"分類ツリーの組み合わせ ( を使用) のみを返すことができます。

私は次のようなことをしたいと思います:

fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
plot(fit) # there are 5 terminal nodes
predict(fit, type = "node_id")   # should return IDs of terminal nodes (e.g. 1-5) (does not work)
4

4 に答える 4

6

そのモデルでは、4 つの分割があり、5 つの「ターミナル ノード」が生成されます。rpart で使用される用語では、<leaf>s. 何かに対して5つの予測が必要な理由がわかりません。予測は特定のケースに対するものであり、葉はそれらの予測を行うために使用される可変数の分割の結果です。最終的に葉になった元のデータセットの行数は、必要な数になる場合があります。その場合、これらの数を取得する方法は次のとおりです。

# Row-wise predicted class
fit$where

# counts of cases in leaves of prediction rules
table(fit$where)
 3  5  7  8  9 
29 12 14  7 19 

特定のリーフに適用されるを組み立てるにはlabels(fit)、ルール ツリーをトラバースし、特定のリーフを生成するために適用されたすべての分割のすべてのラベルを蓄積する必要があります。あなたはおそらく見たいと思うでしょう:

?print.rpart    
?rpart.object
?text.rpart
?labels.rpart
于 2013-07-11T16:37:55.683 に答える
3

上記の $where を使用したメソッドは、ツリー フレームの行番号のみをポップアップ表示します。kyphosis$ID = fit$where そのため、実際のリーフ ノード ID を取得するには、以下を使用するときに、リーフ ノード ID の代わりにノード ID が割り当てられる可能性があります。

MyID <- row.names(fit$frame)
kyphosis$ID <- MyID[fit$where]
于 2016-07-20T20:50:51.967 に答える