0

R の rpart パッケージを使用して、「myData」というデータ フレームから決定木モデルを作成しています。85,590 行あります。

デシジョン ツリーは、次のようなコードを使用して作成されます (重要な部分は「data = myData」です)。

decTree <- rpart(結果 ~ var1 + var2 + ..., data = myData, method = "anova", control = rpart.control(minsplit=30))

このディシジョン ツリーの「リーフ」(ターミナル) ノードをプロットしてラベルを付けると、最初のノードの「左側」に 66,667、右側に 18,923 の初期分割が得られます (行の合計数である 85,590 に追加されます)。 、 予想通り。)

plot(decTree) # 木を描く

text(decTree, use.n = TRUE) #ツリーにラベルを付ける

この最初の分割を作成するルールは、var1 < 1.5 です。

しかし、var1 が < 1.5 である myData の行数を数えると、予想される 85,590 ではなく 79,518 になります (そして、var1 >= 1.5 の行を数えると、ツリーに表示されるのは 18,923 と予想されます。)

長さ (どの (myData$var1 < 1.5))

[1] 79518

この動作を自分で再現することは不可能であることは承知しています (以前の rpart モデルはノード数に関しては正しく機能していたので、今回問題が発生した理由はわかりません)。誰かが以前にこの問題を抱えていたことを願っています。そうでなければ、私のコードにばかげたエラーを見つけました...

私はそれをすべて再実行しようとしましたが、それでもすべて同じ(不一致の)リーフカウント数を取得しました。

また、myData$frame を確認しましたが、間違っているのは「n = ...」ラベルだけではありません。$frame の値は、プロットに表示されているものと一致します (私が自分で行ったカウントとは一致しません)。

decTree$frame

最後に、「var1」値はどれも NA ではありません。すなわち:

length(which(is.na(myData$var1)))

[1] 0

4

0 に答える 0