実体と情報のはざま

いつかデータサイエンティストになって世界を読み解く仕事がしたい!

ランダムフォレストを勉強中!

 ランダムフォレスト、なかなか手強い。一週間くらいかけて今日やっとアルゴリズムを理解したところ。目標では今日あたりにプログラム第一弾が完成しているはずだったのに、何回も立ち止まってしまった。。ネットで拾った英語の論文の解読にも苦労した。これは単なる遠回りだったのだが。今日は、複数の参考資料から得たアルゴリズムと関連情報を自分なりの解釈で書き下しておきたいと思う。

設定:深さDの決定木をT本使う。

①トレーニング

・N個あるトレーニングデータからそれぞれの決定木に対して、n個のサンプルをランダムに非復元抽出する。

・決定木の各ノードtで、P個ある特徴量のうちP'個をランダムに非復元抽する。P'=√Pがちょうど良いかも。

・この中で情報利得が最大になる特徴量とその閾値を選択する。これがランダムフォレストにおける”学習”。(情報利得とは、データを分割する前後における”不純度”の差分のこと。”不純度”とは、情報エントロピージニ係数と呼ばれる値。)

・決定木が深さDまで達するか不純度がゼロになったら木の成長を止める。(テストでは、木の各末端ノードで入力されたデータがどのクラスに属するか判断する。)

②テスト

・あるテストデータを全ての決定木に投入し、個々の木にこのデータがどのクラスに属するか判断させる。最後は多数決で決定する。

 アルゴリズムはざっくりこんな感じの理解でいいかな。あとは、プログラミング作業なのだが、for文if文をどう回すか、データのソートが必要かといったイメージは全然できていない。。Numpyで効率的にやりたいがどうなるだろ。最近仕事が忙しいけど、3日後にはできるかな。

 最後に参考文献で一番役に立った本を紹介。別件で買って本棚に埋もれていたが、あらためてこの丁寧な解説に感謝したい。データサイエンスではしばしば出てくるアルゴリズムの基礎はこれで勉強すると効率が良いと思う。

 Irisデータセットを使っているのもいいね!

 今日はここまで!