7

私はRにかなり慣れていないので、かなりばかげた問題に悩まされています。

分類と予測を行うために、 rpartパッケージを使用して回帰ツリーを調整しています。

R のおかげで、キャリブレーション部分は簡単に実行でき、制御も簡単です。

#the package rpart is needed
library(rpart)

# Loading of a big data file used for calibration
my_data <- read.csv("my_file.csv", sep=",", header=TRUE)

# Regression tree calibration
tree <- rpart(Ratio ~ Attribute1 + Attribute2 + Attribute3 + 
                      Attribute4 + Attribute5, 
                      method="anova", data=my_data, 
                      control=rpart.control(minsplit=100, cp=0.0001))

大きなデシジョン ツリーを調整した後、特定のデータ サンプルに対して、対応する新しいデータのクラスター (したがって予測値) を見つけたいと考えています。機能はニーズにぴったりのようです
predict

# read validation data
validationData <-read.csv("my_sample.csv", sep=",", header=TRUE)

# search for the probability in the tree
predict <- predict(tree, newdata=validationData, class="prob")

# dump them in a file
write.table(predict, file="dump.txt") 

ただし、この方法では、新しい要素の予測比率を取得するだけで、新しい要素が属する決定木の葉predictを取得する方法が見つかりません。

比率を返すには、予測メソッドがその葉を見つけたに違いないので、取得するのはかなり簡単だと思います。

引数を介して predict メソッドに与えることができるいくつかのパラメーターがありますがclass=、回帰ツリーの場合、すべて同じもの (決定ツリーのターゲット属性の値) を返すようです。

決定木で対応するノードを取得する方法を知っている人はいますか?

メソッドを使用してノードを分析することでpath.rpart、結果を理解するのに役立ちます。

4

3 に答える 3

13

残念ながら、ベンジャミンの答えは機能しません。type="vector"それでも予測値を返します。

私の解決策はかなりぎこちないですが、より良い方法はないと思います。トリックは、モデル フレームの予測された y 値を対応するノード番号に置き換えることです。

tree2 = tree
tree2$frame$yval = as.numeric(rownames(tree2$frame))
predict = predict(tree2, newdata=validationData)

これで、予測の出力は、予測された y 値ではなくノード番号になります。

(注: 上記は私の場合tree、分類ツリーではなく回帰ツリーで機能しました。分類ツリーの場合は、おそらくそれを省略するas.numericか、に置き換える必要がありますas.factor。)

于 2011-06-21T19:15:06.957 に答える
2

partykit パッケージを使用できます。

fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)

library("partykit")
fit.party <- as.party(fit)
predict(fit.party, newdata = kyphosis[1:4, ], type = "node")

あなたの例では、設定するだけです

predict(as.party(tree), newdata = validationData, type = "node")
于 2016-06-06T12:35:35.523 に答える
1

rpart docs で説明されているように、あなたが望むのは(クラスが予測メソッドの受け入れられたパラメーターだとは思わない)type="vector"の代わりだと思います:class="prob"

type="vector" の場合: 予測された応答のベクトル。回帰木の場合、これはノードでの平均応答、ポアソン木の場合は推定応答率、分類木の場合は予測されたクラス (数値) です。

于 2011-03-10T18:21:31.477 に答える