はじめに
今回は、基本となる決定木と、それを応用した「チーム戦(アンサンブル学習)」の代表的な手法について、イメージ図を交えて整理します。
1. 決定木 (Decision Tree):基本の条件分岐
決定木は、すべてのアンサンブル学習のベースとなるモデルです。「Yes/No」の条件分岐を繰り返すことで、データを分類・回帰します。
- 特徴: 予測プロセスが可視化されるため、人間にとっての説明性が高いのが最大のメリットです。
- 課題: 1つのモデルではデータの微細な変化に影響を受けやすく、過学習(オーバーフィッティング) に陥りやすい傾向があります。
構造のイメージ
[質問1:気温は25度以上?]
├── (Yes) ── [質問2:晴れている?] ── (Yes) ── 答え:アイスが売れる!🍦
│ └── (No) ── 答え:売れない
│
└── (No) ── 答え:売れない
2. ランダムフォレスト (Random Forest):並列処理(バギング)
単一の決定木の弱点(過学習)を克服するために、複数の決定木を「並列」に作成し、その結果を集計する手法です。
- バギング(Bagging): 学習データをランダムにサンプリングして、少しずつ異なる複数の決定木を同時に学習させます。
- メリット: 複数の木による多数決で最終結果を出すため、一部の木の誤り(外れ値の影響など)を他の木がカバーし、予測が安定します。
多数決のイメージ
🌳 決定木A「売れる!」
🌳 決定木B「売れる!」
🌳 決定木C「売れない」
⬇️
【多数決】 2対1で「売れる!」と判定
3. AdaBoost:重み付けリレー(ブースティング)
モデルを「直列」に並べて、前のモデルの失敗を次がカバーしていく手法をブースティングと呼びます。AdaBoostはその代表格です。
- 重み付け: 最初のモデルが間違えたデータに対して「重み(重要度)」を付与します。
- 特徴: 次のモデルはその「重いデータ(難しい問題)」を重点的に学習します。これを繰り返すことで、徐々に苦手分野を克服した強力なチームを作り上げます。
学習の進め方
🏃♂️ 第1学習者:
「全体の傾向は掴んだが、雨の日の予測を間違えた…」
⬇️ (雨の日のデータに"重み"を付けて次へ)
🏃♂️ 第2学習者:
「前の人が間違えた『雨の日』を重点的に学習して克服する!」
4. 勾配ブースティング (Gradient Boosting):誤差の最小化
AdaBoostと同じく「直列」の学習ですが、バトンの渡し方が異なります。
- 誤差(残差)の学習: 前のモデルが出した予測値と正解との「ズレ(誤差)」をターゲットにして、次のモデルがその誤差を埋めるように学習します。
- 特徴: 誤差を少しずつ削り落としていくプロセスを繰り返します。XGBoostやLightGBMといった、現在の機械学習コンペで主流となっている最強クラスのアルゴリズムは、この手法の発展形です。
誤差修正のイメージ
🎯 正解:100点
🏃♂️ 第1学習者:「予測は70点!」 👉 残りの誤差:30点
⬇️
🏃♂️ 第2学習者:「私は残りの30点を埋める学習をする。予測は25点!」 👉 残りの誤差:5点
⬇️
🏃♂️ 第3学習者:「残りの5点を埋める。予測は4点!」
✨ 最終結果:70 + 25 + 4 = 99点 (正解に限りなく近づく)
まとめ
以下の対応関係を押さえておくのが有効です。
| 手法名 | キーワード・戦い方 | 処理の方向 |
|---|---|---|
| 決定木 | Yes/No、条件分岐、説明性が高い | 単体 |
| ランダムフォレスト | 森、多数決、バギング | 並列 |
| AdaBoost | 誤分類への重み付け、ブースティング | 直列 |
| 勾配ブースティング | 誤差(残差) の学習、最強クラス | 直列 |
アンサンブル学習には、「一斉に多数決(並列:バギング)」 か 「弱点を補強するリレー(直列:ブースティング)」 か、という2つの大きな流れがあることを理解しておくと、知識が整理されやすくなります。
おわりに
アルゴリズムの「個別の仕組み」と「組み合わせのパターン」を区別して理解することは非常に重要だと思います。
学習に利用している書籍
