2

現在、MMST パッケージでワイン データを扱っています。データセット全体をトレーニングとテストに分割し、次のコードのようなツリーを構築しました。

library("rpart")
library("gbm")
library("randomForest")
library("MMST")

data(wine)
aux <- c(1:178)
train_indis <- sample(aux, 142, replace = FALSE)
test_indis <- setdiff(aux, train_indis)

train <- wine[train_indis,]
test <- wine[test_indis,]    #### divide the dataset into trainning and testing

model.control <- rpart.control(minsplit = 5, xval = 10, cp = 0)
fit_wine <- rpart(class ~ MalicAcid + Ash + AlcAsh + Mg + Phenols + Proa + Color + Hue + OD + Proline, data = train, method = "class", control = model.control)

windows()
plot(fit_wine,branch = 0.5, uniform = T, compress = T,  main = "Full Tree: without pruning")
text(fit_wine, use.n = T, all = T, cex = .6)

そして、次のような画像を取得できました。 剪定しない木

各ノードの下の数字 (たとえば、グリニョリーノの下の 0/1/48) は何を意味しますか? 各ノードに分類されるトレーニング サンプルとテスト サンプルの数を知りたい場合、コードに何を記述すればよいですか?

4

1 に答える 1

9

数字は、そのノードの各クラスのメンバーの数を示します。したがって、「0/1/48」というラベルは、カテゴリ1(バラベラ、私が推測する)のケースが0であり、カテゴリ2(バローロ)の例が1つだけであり、カテゴリ3(グリニョリーノ)のケースが48であることを示しています。

を使用して、ツリーと各ノードに関する詳細情報を取得できますsummary(fit_wine)
詳細については、を参照?summary.rpartしてください。

さらにpredict()(を呼び出すpredict.rpart())を使用して、ツリーがデータセットをどのように分類するかを確認できます。たとえば、predict(fit_wine, train, type="class")。または、見やすいようにテーブルに包みますtable(predict(fit_wine, train, type = "class"),train[,"class"])

観測がどのリーフノードに該当するかを具体的に知りたい場合、この情報はに保存されfit_wine$whereます。データセット内の各ケースについて、ケースが該当するリーフノードを表すのfit_wine$where行番号が含まれます。fit_wine$frameしたがって、次のようにして各ケースのリーフ情報を取得できます。

trainingnodes <- rownames(fit_wine$frame)[fit_wine$where]

テストデータのリーフ情報を取得するために、私はそれを実行predict()type="matrix"て推測していました。これは、紛らわしいことに、予測されたクラス、適合ツリー内のそのノードでのクラスカウント、およびクラス確率を連結することによって生成された行列を返します。したがって、この例では:

testresults <- predict(fit_wine, test, type = "matrix")
testresults <- data.frame(testresults)
names(testresults) <- c("ClassGuess","NofClass1onNode", "NofClass2onNode",
     "NofClass3onNode", "PClass1", "PClass2", "PClass2")

これから、たとえば)からさまざまなノードを推測できますが、unique(testresults[,2:4]エレガントではありません。

ただし、Yujiは、前の質問でこれを巧妙にハックしています。彼はrpartオブジェクトをコピーし、クラスの代わりにノードを使用するため、predictを実行すると、クラスではなくノードが返されます。

nodes_wine <- fit_wine
nodes_wine$frame$yval = as.numeric(rownames(nodes_wine$frame))
testnodes <- predict(nodes_wine, test, type="vector")

私はここに解決策を含めましたが、人々は彼に賛成するべきです。

于 2012-12-03T21:35:21.060 に答える