hiro_5656's blog

機械学習やクラウド技術について勉強したことを発信していきます!

【入門】DecisionTree・RandomForest の基本

 

概要

最近の機械学習コンペではもっぱらXGBoostやLightGBMが使われることが多いみたいなので、
今回はその基本となる DecisionTree や RandomForest をまとめていきます!

 

参考書籍

以下の書籍を参考にさせていただきました!

 

www.amazon.co.jp

 

 

DecisionTree (決定木)

まずは、DecisionTree (決定木) からご説明します。
決定木は対象物を正しいカテゴリに分類するために使用されます。

f:id:hiro_5656:20211223201239p:plain

上の図を見てください。
決定木はノード(節)& それをつなぐエッジ(枝)から構成されます。
この図だとノードは四角のボックスです。
ノードには分類をする際の条件がそれぞれ設定されています。
その条件の判定によってエッジで繋がれた次の(1つ下の階層の)ノードへと移動することになります。

図の中で1番上のノードを「根ノード」、1番下のノードを「葉ノード」といいます。
根ノードから始めて、条件判定を繰り返しながら葉ノードまで到達したら終了です。
つまり葉ノードが最終的なクラスとなります。
この根から枝分かれしていって、最終的な葉に至る様子から「決定木」と呼ばれます。
通常の木とは逆向きですが...

例えばこの図の決定木で「ヒト」がどの動物の種類に分類されるかを見てみましょう。
根ノードから始めて、「肺呼吸である」(Yes)→「恒温動物である」(Yes)→「哺乳類」となり、「ヒト」は「哺乳類」に分類されることがわかります。

 

決定木の特徴

  • 分割条件は分割後の各ノードに含まれるデータのばらつきが最小になるように決められる
  • 葉ノードに含まれるデータが全て同じクラスになるまで分割を繰り返す

決定木にはこのような特徴があるため、訓練データでの精度は必ず100%になります。
これは過学習の原因となるため、ある程度の深さで分割を中断させるようにします。

 

データのばらつき...?

データのばらつきとはいっても、どうやって計算するか気になりますよね。
データのばらつきを定量的に表現する2つの方法をご紹介します。

 

ジニ不純度 I_{gini}(t) = \sum_{i=1}^C p(i|t)(1-p(i|t)) = 1-\sum_{i=t}^C p(i|t)^2

 

交差エントロピー誤差 I_{entropy}(t) = -\sum_{i=1}^C p(i|t)\log_2 p(i|t)

 

ここでp(i|t)とは、あるノードtでクラスiに属するサンプル数の割合。Cは総クラス数。
不純度Iは0に近いほどばらつきが少ないです。

 

回帰の場合

クラス分類を例にして決定木の説明をしてきたが、回帰の場合はどうなるのでしょうか。
クラス分類では、葉ノードのクラスはその葉クラスに属するサンプルの最頻クラスです。回帰の場合、葉ノードの値は葉ノードに属するサンプルの平均値となります。

また分割条件はサンプルの分散が最小になるように分割します。

 

決定木のメリット・デメリット

メリット
  • 分類・回帰の両方に利用できる
  • データの正規化などの前処理が必要ない(分割条件はその変数の尺度で表現できる)
  • 木を可視化することで分割の処理内容を理解できる
  • 特徴量の寄与度(重要度)を計算できる
デメリット
  • 表現能力が葉ノードの数(高々ある程度の数までしかない)などに依存しているので、他の手法に比べ学習能力に限界がある

RandomForest (ランダムフォレスト)

決定木でも分類や回帰を行うことは可能ですが、これを使っている人はあまり見受けられない。木系の機械学習手法を使うのであれば RandomForest (ランダムフォレスト)を使うことの方が多いでしょう。
決定木のメリットを活かしつつ、学習能力を向上させることができます!

アンサンブル手法

RandomForestではアンサンブル手法が用いられています。
アンサンブル手法とは、複数のモデルを組み合わせる手法です。
複数の決定「木」を組み合わせていることから、Random"Forest" と呼ばれているのですね。
アンサンブル手法では1つ1つのモデルはそこまで性能は良くありませんが(弱識別器といいます)、複数組み合わせることで性能を良くしています。
アンサンブル手法にはいくつか種類がありますが、ここでは2つ紹介します!

バギング

RandomForestで用いられているアンサンブル手法です。
バギングでは複数あるモデルを並列的に並べ、それぞれのモデルが出した予測結果をもとに多数決を取ることで最終的な予測結果とするようなやり方です。

f:id:hiro_5656:20211224202623p:plain

ブースティング

ブーステイングは複数あるモデルを直列的に並べ、直前のモデルの出力と正解ラベルとの誤差を埋めるように学習を重ねていく手法です。
先に話題に挙げたXGBoostなどはこのブースティングの手法の一種です。

f:id:hiro_5656:20211224211544p:plain

ランダム...?

RandomForest のランダムとは何のことでしょうか?
RandomForest には主に2つのランダム性があります。

データのランダム性

学習に使用するデータを全データからランダムに抽出することで、決定木ごとに学習するデータが異なるようにします。このときの抽出方法は重複を許します。(復元抽出)
この操作によって作成されたデータセットをブートストラップ標本といいます。

分割条件に使用できる特徴量のランダム性

分割条件にもランダム性があります。
決定木では「すべての特徴量」から最善の分割条件を選んでいましたが、
RandomForest ではランダムに抽出した「一部の特徴量」からしか分割条件を選択できません。このときの一部の特徴量の抽出方法は重複を許さないようにします。(非復元抽出)

多重共線性

RandomForestを使用していく際に注意しないといけないのが「多重共線性」です。
「多重共線性」とは特徴量どうしで相関の強いペアが存在していることです。
上でご紹介した参考書籍によれば、相関値が0.95以上が目安だそうです。
なぜ相関が強い特徴のペアが存在するとマズイのかというと、寄与度(重要度)の計算の際なんかに相関のあるペアどうしで寄与度が分散してしまって、正確な値がわからなくなるからだそうです。
回帰問題においても「多重共線性」は問題になる場合があり、例えば相関が強い特徴量ペアがあるとそれらの回帰係数の分散が大きくなり、学習が安定しなくなります。

そのため機械学習においては相関の強い特徴量ペアが見つかった場合は、どちらかの特徴量を消す必要があるのです。

あとがき

今回は DecisionTree と RandomForest について基本的な概念や特徴を中心にご紹介しました。scikit-learn などを使った実際のソースコードは別の記事で書いていきたいと思います!