ランダム森(Random Forest)

ランダム森、ランダムフォレスト、なんでもいいけど、要するに決定木を洗練するプログラムみたい。和訳するなら「乱数の森」、とかかっこいいんじゃない?(笑)

関連するキーワードは、自動学習、機械学習、集団学習、分類木、ブートストラップ、バギング、ってところでしょうか。

順を追って説明すると、とあるデータを使って決定木で分類ルールを探している。
こんな感じに。

こうすると、最後のテーブルは

こんな感じになって、1936件のデータのうち、15+1890=1905件、約98%の精度でフィットさせることができる、っていうことがわかる。

さて、データが多いときのメリットは、交差妥当性をチェックできること。
単純な方法は、データをランダムに分割して、例えば60%を学習用、残りの40%を予測用に使ったりする。

ソースはこうだ。

この結果は例えば、

こうなった。775件のデータのうち、96%(=(3+744)/775)をあてた、ってことだ。

さて、乱数の森(Random Forest,RF)はこういう分割をしなくても、自動的にもとのデータセットからいくつかの変数をランダムサンプリングし、そのサブ・データセットを大量に作り、それぞれで木を組み立てる。だから森ができるのね。その森の中で、判別が上手くいく変数にポイントをつけて、変数の重要度みたいなのを算出する。

ソースと結果です。

これによると、3変数からなる500本の木をつくって学習させたところ、97.7%の分類ができたよ、ってことになっている。
森で予測しているから、どういうルートで、っていうのがわからない=解釈できないみたいだけど、ここで作ったモデルから新しいデータに対する予測は、上でやったpredict関数でできるみたいで、

元のデータに当てはめてみたら、こうなった。かなりの精度だ。

木が描けると、ストーリーができたりして、心理学分野なんかでは解釈につかえていいかなぁ、と思っていたのだけど、森になったらそうもいかないのかもしれない。精度の高い木トップ10とか、描画してくれたらいいのに。

いや、俺がその方法を見つけられてないだけかもしれませんから、ご存知の方はご一報ください。

取りあえず、変数の重要度がわかるというのはメリット、メリット!

コメントは受け付けていません。