1

rpart を使用して決定木を作成しましたが、トレーニング データのどのケースが各ターミナル ノードに該当するかを正確に見つける方法を知りたいと思っています。

私はこのリンクの答えに従いました: ツリーの各ノードに入る観測をカウントする方法です が、何らかの理由で $where 関数は、どのケースがどのターミナルノードに対応するかを示す行番号なしで、ターミナルノードのベクトルを生成するだけです。ただし、tree パッケージを使用して作成されたツリーでまったく同じことを行うと、対応するターミナル ノードを含む行番号 (各ケースを識別する) のリストが取得されます。唯一の違いは、rpart パッケージでは $where が "int" ベクトルを生成するのに対して、tree パッケージでは $where が "Named int" ベクトルを生成することです。rpart から作成されたツリーに対して同じ「Named int」ベクトルを生成する方法を知りたいですか?

で提案されている答えも試しました: ツリーモデルのノードのルールに合格するデータフレーム内のデータ要素を見つけますか? しかし、モデルの作成中にrpartが16個の観測を削除したため、結果のモデルの観測数がモデルの作成に使用された元のデータフレームと一致しないため、うまくいきません。

答えが明らかな場合は申し訳ありませんが、初心者の R ユーザーです。

ツリーの作成に使用したコードは次のとおりです。このツリーは、行動プロファイルに基づいて自閉症の診断を予測するために使用されます。

Set.seed(565808016)
inTrain21<- createDataPartition(clinicaldiagnosis, p=0.75, list=FALSE)
training_data21<- Decisiontree4[ inTrain21,]
testing_data21<- Decisiontree4[-inTrain21,]
test_clinicaldiagnosis21<-clinicaldiagnosis[-inTrain21]
lossmatrix=matrix(c(0,1,1,1,0,1,2,1,0), ncol=3, nrow=3)

set.seed(591251974)
tree_model22= rpart(clinicaldiagnosis~ Visualtracking + etc etc, training_data21, na.action=na.rpart, method="class", control=rpart.control(cp=0.00001), parms=list(loss=lossmatrix))
plot(tree_model22, uniform=TRUE, margin=0.05)
text(tree_model22, use.n=TRUE, pretty=0)
plotcp(tree_model22)
printcp(tree_model22)

pruned_model22=prune(tree_model22, cp=0.0146341)
plot(pruned_model22, uniform=TRUE, margin=0.1)
text(pruned_model22, use.n=TRUE, cex=0.85, splits=TRUE, pretty=0)

tree_pred22=predict(pruned_model22, testing_data21, type="class")
table(tree_pred22, test_clinicaldiagnosis21)
trainingnodes22<-rownames(pruned_model22$frame)[pruned_model22$where] #this only gives a list of terminal nodes without the corresponding row names
4

0 に答える 0