ランダムフォレストの仕組みを理解しようとしています。木がどのように構築されるかについては把握していますが、ランダムフォレストがバッグのサンプルから予測を行う方法を理解できません。誰でも簡単な説明をお願いできますか?:)
ランダムフォレストの仕組みを理解しようとしています。木がどのように構築されるかについては把握していますが、ランダムフォレストがバッグのサンプルから予測を行う方法を理解できません。誰でも簡単な説明をお願いできますか?:)
回答:
フォレスト内の各ツリーは、トレーニングデータの観測のブートストラップサンプルから構築されます。ブートストラップサンプル内のこれらの観測はツリーを構築し、ブートストラップサンプル内にない観測はout-of-bag(またはOOB)サンプルを形成します。
OOBサンプルのケースと同じように、ツリーの構築に使用されるデータのケースにも同じ変数を使用できることは明らかです。OOBサンプルの予測を取得するために、それぞれが現在のツリーに渡され、ツリーのルールは、ターミナルノードに到達するまで続きます。これにより、その特定のツリーのOOB予測が生成されます。
このプロセスは何度も繰り返されます。各ツリーは、トレーニングデータと新しいOOBサンプルの予測から得られた新しいブートストラップサンプルでトレーニングされます。
木の数が増えると、任意の1つのサンプルがOOBサンプルに2回以上含まれるので、サンプルがOOBにあるN個のツリーの予測の「平均」が、各トレーニングサンプルのOOB予測として使用されます。ツリー1、...、N。「平均」では、連続的な応答の予測の平均を使用します。または、カテゴリ別の応答に多数決を使用することもできます(多数決は、木1、...、N)。
たとえば、10個のツリーのトレーニングセットの10個のサンプルについて、次のOOB予測があると仮定します。
set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p
> oob.p
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7 8 2 1 NA 5 3 2
samp2 6 NA 5 7 3 NA NA NA NA NA
samp3 3 NA 5 NA NA NA 3 5 NA NA
samp4 6 NA 10 6 NA NA 3 NA 6 NA
samp5 NA 2 NA NA 2 NA 6 4 NA NA
samp6 NA 7 NA 4 NA 2 4 2 NA NA
samp7 NA NA NA 5 NA NA NA 3 9 5
samp8 7 1 4 NA NA 5 6 NA 7 NA
samp9 4 NA NA 3 NA 7 6 3 NA NA
samp10 4 8 2 2 NA NA 4 NA NA 4
where NA
は、サンプルがそのツリーのトレーニングデータに含まれていたことを意味します(言い換えると、OOBサンプルに含まれていませんでした)。
NA
各行の非値の平均は、フォレスト全体の各サンプルのOOB予測を提供します
> rowMeans(oob.p, na.rm = TRUE)
samp1 samp2 samp3 samp4 samp5 samp6 samp7 samp8 samp9 samp10
4.00 5.25 4.00 6.20 3.50 3.80 5.50 5.00 4.60 4.00
各ツリーがフォレストに追加されると、そのツリーを含めるまでOOBエラーを計算できます。たとえば、各サンプルの累積平均は次のとおりです。
FUN <- function(x) {
na <- is.na(x)
cs <- cumsum(x[!na]) / seq_len(sum(!na))
x[!na] <- cs
x
}
t(apply(oob.p, 1, FUN))
> print(t(apply(oob.p, 1, FUN)), digits = 3)
tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1 NA NA 7.00 7.50 5.67 4.50 NA 4.6 4.33 4.0
samp2 6 NA 5.50 6.00 5.25 NA NA NA NA NA
samp3 3 NA 4.00 NA NA NA 3.67 4.0 NA NA
samp4 6 NA 8.00 7.33 NA NA 6.25 NA 6.20 NA
samp5 NA 2 NA NA 2.00 NA 3.33 3.5 NA NA
samp6 NA 7 NA 5.50 NA 4.33 4.25 3.8 NA NA
samp7 NA NA NA 5.00 NA NA NA 4.0 5.67 5.5
samp8 7 4 4.00 NA NA 4.25 4.60 NA 5.00 NA
samp9 4 NA NA 3.50 NA 4.67 5.00 4.6 NA NA
samp10 4 6 4.67 4.00 NA NA 4.00 NA NA 4.0
このようにして、特定の反復までのフォレスト内のN本のツリーで予測がどのように蓄積されるかがわかります。行全体を読み取る場合、右端の非NA
値は、上記のOOB予測で示した値です。これがOOBパフォーマンスのトレースの作成方法です。Nツリーにわたって累積的に蓄積されたOOB予測に基づいて、OOBサンプルのRMSEPを計算できます。
表示されるRコードは、RのrandomForestパッケージのrandomForestコードの内部から取得したものではないことに注意してください。各ツリーからの予測が決定されると、何が起こっているのかを追跡できるように、単純なコードをいくつかノックアップしました。
各ツリーはブートストラップサンプルから構築されており、ランダムフォレストには多数のツリーがあるため、各トレーニングセットの観測値は1つ以上のツリーのOOBサンプルに含まれているため、すべてのOOB予測を提供できます。トレーニングデータのサンプル。
一部のOOBケースなどのデータが欠落しているなどの問題については説明しましたが、これらの問題は単一の回帰ツリーまたは分類ツリーにも関係しています。また、フォレスト内の各ツリーは、mtry
ランダムに選択された変数のみを使用することに注意してください。
http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf
。115-116ページでは、著者はRFを使用してvariable importance
技術指標を選択しています。
"To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node"
、その内容について簡単な説明rules for the tree
がありますか?そしてsample
、サンプルがgroups
ツリーがデータを分割する観測値であることを理解している場合、行として正しく理解できますか?