ランダムフォレストと予測


13

ランダムフォレストの仕組みを理解しようとしています。木がどのように構築されるかについては把握していますが、ランダムフォレストがバッグのサンプルから予測を行う方法を理解できません。誰でも簡単な説明をお願いできますか?:)

回答:


16

フォレスト内の各ツリーは、トレーニングデータの観測のブートストラップサンプルから構築されます。ブートストラップサンプル内のこれらの観測はツリーを構築し、ブートストラップサンプル内にない観測は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ランダムに選択された変数のみを使用することに注意してください。


素晴らしい答え、ギャビン!を書くとき"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ツリーがデータを分割する観測値であることを理解している場合、行として正しく理解できますか?
user1665355

@ user1665355回帰ツリーまたは分類ツリーがどのように構築されるかを理解していると思いますか?RFのツリーに違いはありません(停止ルールの場合を除く)。各ツリーは、トレーニングデータを応答の類似した「値」を持つサンプルのグループに分割します。ツリー内の最初の分割またはルールは、変数および分割位置(pH> 4.5など)で最もよく予測される(つまり、「エラー」を最小化する)ものです。次に、この分割の各ブランチが順番に検討され、ツリーの「エラー」を最小化する新しい分割/ルールが識別されます。これは、バイナリ再帰分割アルゴリズムです。分割がルールです。
モニカの復活-G.シンプソン

@ user1665355はい、申し訳ありませんが、サンプルが観測であるフィールド、データセットの行から来ました。ただし、ブートストラップサンプル、つまりトレーニングデータから置換して描画されたN個の観測値について話し始めると、N個の行または観測値があります。後で用語の整理を試みます。
モニカの復職-G.シンプソン

ありがとう!私はRFに非常に新しいので、たぶんばかげた質問をすみません:)私はあなたが書いたほとんどすべてを理解していると思います、非常に良い説明です!ツリー内の最初の分割またはルールを最もよく予測する(つまり、「エラー」を最小化する)変数と分割位置(pH> 4.5など)について疑問に思います...エラーが何であるか理解できません。:/読んで理解しようとしていますhttp://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf。115-116ページでは、著者はRFを使用してvariable importance技術指標を選択しています。
user1665355

「エラー」は、どのタイプのツリーが適合しているかによって異なります。逸脱は、連続(ガウス)応答の通常の尺度です。rpartパッケージでは、Gini係数がカテゴリカル応答のデフォルトですが、他のモデルなどには他にもあります。正常にデプロイする場合は、TreesおよびRFに関する優れた本を利用してください。変数Imprortanceメジャーは何か異なるものです-それらは、変数がツリーに適合するために使用される場合と使用されない場合に何かがどのくらい変化するかを見ることによって、データセット内の各変数の「重要性」を測定します。
モニカの復活-G.シンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.