🐈

Act 21. ランダムフォレストについて学ぶ

2024/11/22に公開

はじめに

Act 01. AIで外国為替を自動売買するまでの道のりをベースに学習を進めて行く。

前回は決定木について学習した。
今回からランダムフォレストについて学習する。

今後学習する内容は以下の通り。
学習はChatGTPさん考案の以下の順序で進めて行く。

学習順序

教師あり学習

  1. 線形回帰: 基本的な回帰問題を学ぶ。 2024/11/13 学習済み
  2. ロジスティック回帰: 分類問題の基本を理解する。 2024/11/17 学習済み
  3. 決定木: シンプルで直感的なモデル。 2024/11/20 学習済み
  4. ランダムフォレスト: 決定木のアンサンブル学習。

教師なし学習

  1. k平均法: クラスタリングの基本。
  2. 主成分分析(PCA): 次元削減の手法。

強化学習

  1. 基本的な概念: エージェント、環境、報酬の関係を理解する。
  2. Q学習: 簡単な強化学習アルゴリズム。
    ※強化学習は重要だと判断したため、概念から再度学習する。

ランダムフォレスト

ChatGTPさんの回答

ランダムフォレストについて詳しく教えてーとお願いしてみた結果、以下の回答を貰った。

ランダムフォレスト (Random Forest) は、複数の決定木を組み合わせてより良い予測を行う機械学習アルゴリズムです。分類にも回帰にも使えます。「ランダム」という名前の通り、いくつかの工夫でモデルに多様性を持たせ、過学習を防ぎます。

以下に、ランダムフォレストの仕組みを分類と回帰の両面で説明します。

1. ランダムフォレストの全体像

  • 決定木:データを分割していき、最終的に「葉」に分類や予測の結果を持つ構造。
  • 問題点:単一の決定木はデータに過剰適合しやすい。
  • ランダムフォレストのアプローチ
    • 複数の決定木を作り、それぞれの結果を統合する(分類なら「多数決」、回帰なら「平均」)。
    • 各木を作る際に、データや特徴量をランダムに選ぶことで多様性を確保。

2. 学習プロセス

(1) データのサンプリング (ブートストラップ法)

  • 元のデータからランダムに「復元抽出」して、各決定木用の学習データセットを作成。
    • 「復元抽出」とは、同じデータが何度も選ばれる可能性があるという意味。
    • 結果的に、各決定木のデータセットは元のデータセットの約63%程度が含まれる。

(2) 決定木の構築

  • 各決定木で、分割に使う特徴量をランダムに選ぶ。
    • 例えば、元のデータに10個の特徴量があれば、1回の分割でそのうち3〜5個だけをランダムに選ぶ。
    • これにより、異なる特徴量に依存する多様な木ができる。

(3) 木の完成

  • 各木は過剰適合を気にせず、十分に成長させる(剪定を行わない)。

3. 予測プロセス

分類問題

  1. 各決定木がデータの分類結果を出す。
  2. すべての決定木の予測を集め、多数決で最終予測を決定。

例:

  • 木1の予測:「クラスA」
  • 木2の予測:「クラスB」
  • 木3の予測:「クラスA」
    → 「クラスA」が多数なので、最終予測は「クラスA」。

回帰問題

  1. 各決定木がデータの数値予測を出す。
  2. すべての決定木の予測値を平均し、最終予測値とする。

例:

  • 木1の予測:100
  • 木2の予測:120
  • 木3の予測:110
    → 平均値 (100 + 120 + 110) ÷ 3 = 110 が最終予測。

4. ランダムフォレストの利点

  • 過学習の防止:ランダム性により、個々の決定木が過剰適合しても全体としては安定した予測が可能。
  • 特徴量の重要度評価:各特徴量が分割にどれだけ寄与したかを定量化できる。
  • 高精度:単一のモデルに比べて精度が高い。

5. 使用例

分類問題

  • スパムメール判定(クラス:スパム or 通常メール)
  • 顧客が製品を購入するか否か(クラス:購入する or しない)

回帰問題

  • 家の価格予測(連続値:価格)
  • 気温予測(連続値:気温)

まとめ

ランダムフォレストは「たくさんの決定木の力を借りて、予測を安定・高精度にする」アルゴリズムです。
分類問題では「多数決」、回帰問題では「平均」を使って結果を統合します。特徴量のランダム選択やデータのランダムサンプリングによって多様なモデルを作ることで、単一の決定木の弱点を克服します。

分かりやすくするための補足や具体例が欲しい場合はお知らせください!

自分なりに解説

ChatGTPさんの説明を自分なりに理解するために色々調べたので、それを記事に書いていこうと思う。

1. データサンプリング

まず初めに、ランダムフォレストではデータサンプリングを行う。
データサンプリングとは、データセットの中からランダムに値を復元抽出して、新しく複数のデータセットを作成すること。
※復元抽出・・・データが重複する可能性がある抽出方法

例えば以下のようなデータが存在したとする。

D = {1, 2, 3, 4, 5}

このデータに対してサンプリングを行う。

  • 1回目の抽出:
    元データからランダムに1つ選ぶ → 3
  • 2回目の抽出:
    再び元データ全体からランダムに1つ選ぶ → 5
  • 3回目の抽出:
    再び元データ全体からランダムに1つ選ぶ → 3 (重複可)
  • 4回目の抽出:
    再び元データ全体からランダムに1つ選ぶ → 2
  • 5回目の抽出:
    再び元データ全体からランダムに1つ選ぶ → 1

結果のサンプルは S_1 = \{ 3, 5, 3, 2, 1 \} となる。
復元抽出のため 3 のように重複することがある。

そして、今回のような選ばれなかった 4OOBデータという。
OOBデータは無駄になるわけではなく、ランダムフォレストの精度を評価するのに使用できるらしい。

ランダムフォレストでは、このようにデータセットからサンプリングを行う。
しかも、サンプリングは1回だけではなく複数行う。

例えば、以下のようなイメージ。

  1. S_1 = \{ 3, 5, 3, 2, 1 \}
  2. S_2 = \{ 2, 1, 4, 4, 5 \}
  3. S_3 = \{ 1, 3, 3, 5, 2 \}

2. 決定木の構築

続いての手順は決定木の構築。
これに関しては前回学習した内容とほぼ同じだから詳細は割愛する。

異なるところとして、ランダムフォレストでは複数の決定木を構築する。
決定木の個数はデータサンプリングで復元抽出したサンプリングの個数分行う。

ランダムなデータで抽出されたデータであるため、多様な形の決定木が構築されることになる。

3. 木の完成

ChatGTPさんの説明にあったこの項目については良く分からない。
「2. 決定木の構築」で木が完成しましたよ。ってことかな?わざわざ章を分けた意味があるのか…。

4. 予測プロセス

複数の決定木が完成したため、ここからは学習したモデルを使用して予測を行う。
ランダムフォレストでは回帰と分類の予測を行うことが可能となっている。

分類の場合

各決定木がデータの分類を行い、結果の中で最も多かった回答を予測結果とする。
例えば、3つの決定木が以下のような分類予測を行ったとする。

  • 決定木1: 「クラス1」と予測
  • 決定木2: 「クラス1」と予測
  • 決定木3: 「クラス2」と予測

クラス1が多数となるため、予測結果はクラス1となる。

回帰の場合

各決定木がデータの回帰予測を行い、結果の平均値を最終的な予測結果とする。
例えば、3つの決定木が以下のような回帰予測を行ったとする。

  • 決定木1: 「120」と予測
  • 決定木2: 「100」と予測
  • 決定木3: 「110」と予測

この場合の予測結果は以下の通り。

\frac{120 + 100 + 110}{3} = 110

簡単だがランダムフォレストの学習プロセスと予測プロセスの説明は以上とする。
決定木をしっかり理解していればそんなに難しくない内容だと思う。

決定木とランダムフォレストの関係について

ChatGTPさんの説明を読んでいて、決定木に似ているなという印象を持った。
ランダムフォレストというアルゴリズムが存在するということは、それぞれのアルゴリズムの強みみたいなのがあるんだと思う。

ということで調べて比較してみた。

項目 決定木 ランダムフォレスト
過学習 高い(ノイズに敏感) 低い(多数の木で平均化)
外れ値の影響 大きい 小さい(ランダムサンプリングで頑健性が向上)
複雑なデータ 決定境界が単純すぎる 複数の木で複雑な決定境界を表現
特徴量の偏り 特定の特徴量に依存しやすい ランダム選択により全特徴量を公平に利用
汎化性能 低い(トレーニングデータに特化) 高い(複数の木の結果を統合)

えー、ランダムフォレストの方が優れてるじゃん…。
前回の記事で決定木について学んで、凄い!面白い!と簡単に喜んでいた自分はまだまだだったんだな…。

少し悔しい思いをしたが、落ち込んでいても仕方ないので、それぞれの比較項目についてもう少し詳しく書いていく。

過学習

決定木は完全にデータセットに対してトレーニングを行うため、ランダムフォレストと比べて過学習が発生する可能性が高くなるらしい。

例えば以下のようなデータがあったとする。
左の図が決定木で右の図がランダムフォレスト。
紫と黄色の〇は学習データで、少し見づらいが×がテスト結果。

前回学習したが、決定木はジニ不純度が0になるまで学習を行っていた。
つまり、すべてのデータを完璧に分類していた。

その結果何が言えるかというと、同じデータは完璧に分類することが可能だが、異なるデータになると完璧に分類できるとは言えなくなる。

原因は赤丸で囲っているような個所。

決定木の決定境界(左のグラフ)は細かい部分までトレーニングデータに合わせているため、データのノイズや細かい特徴に過剰に適応していることが分かる。

これが過学習ということなんだと思う。

外れ値の影響

これは過学習の個所で説明した内容と被ってしまうが、外れ値に対しても完璧に適用しようとする決定木は、外れ値の影響を受けやすくなってしまうということ。

複雑なデータ

過学習の際に載せた画像は、比較的分類しやすいデータセットだったため、あのような簡単な分類結果になった。

しかし、もっとごちゃ付いた複雑なデータの場合、決定木で分析を行うと決定境界はかなり複雑なものになることは容易に想像出来る。

特徴量の偏り

特徴量の偏りとは、以下のようなイメージとなる。
左が決定木で右がランダムフォレストの棒グラフ。

この画像がどのようなデータに対して学習を行ったか分からないため何とも言えないが、決定木の場合にはこのように特徴量の偏りが激しいらしい。

確かに言われてみれば思い当たる節が…。
これ、なーんだ????

そう、見覚えがあるこれは、Irisのデータセットを決定木で分類したときに表示した決定木の画像。
これを見ても分かる通り、petal length(花弁の長さだったかな?)でかなり分類を行っている。

その後はpetal width(花弁の幅だったかな?)で分析している。
ほぼこの二つの特徴量で全ての分析が完了している。

ちなみにだが、このデータセットでは特徴量は4つある。
つまり2つは無視されているという状態なわけだ…。

ランダムフォレストの場合は、サンプリングの際にランダムでデータの復元抽出を行うため、決定木に比べると偏りにくいらしい。

汎化性能

今までの説明を踏まえた結果、ランダムフォレストの方が決定木より汎化性能が高いと言えるわけだ。

ちなみに汎化性能とは、モデルが未知のデータに対してどれだけ正確に予測できるかを表す指標らしい。

さいごに

いやー、ランダムフォレストを知ってしまったら決定木使わなくなるじゃんこれ。
きっとこの先もランダムフォレストより便利なアルゴリズムを学習して、そのたびにこんな感じのことを思うんだろうな。

いつもの通り、次はpythonでランダムフォレストを実装してみる。
次回の学習が終わったら教師なし学習に進める…。
長かった!あと少し頑張ろう!

ではまた

Discussion