ランダムフォレスト らんだむふぉれすと
ランダムフォレストアンサンブル学習バギング特徴量重要度決定木
ランダムフォレストについて教えて
簡単に言うとこんな感じ!
たくさんの決定木を作って、多数決で予測するモデルだよ。「1本の木は不安定」という弱点を、「森(フォレスト)を作って民主的に決める」ことで解決した手法。表形式データでは今でもXGBoostと並ぶ定番中の定番なんだ!
ランダムフォレストとは
ランダムフォレスト(Random Forest)は、複数の決定木を組み合わせたアンサンブルモデルです。2001年にLeo Breimanが提案しました。
各ツリーは独立して学習し、最終的な予測は全ツリーの多数決(分類)または平均(回帰)で行います。「ランダム」という言葉は2つのランダム性を指します。
2つのランダム性
1. ブートストラップサンプリング
→ 各ツリーの訓練に使うデータをランダムに復元抽出
→ 違うデータで違う木を育てる
2. 特徴量のランダムな部分選択
→ 各分岐で使う特徴量を全体からランダムにサンプリング
→ ツリー間の相関を下げる
この2つのランダム性によって、多様なツリーが生まれ、アンサンブルが機能します。
特徴と評価
| 比較項目 | 決定木 | ランダムフォレスト |
|---|---|---|
| 過学習 | しやすい | しにくい |
| 安定性 | 低い | 高い |
| 解釈性 | 高い | やや低い(各木は見られるが) |
| 速度 | 速い | やや遅い(並列化で改善) |
| 特徴量重要度 | あり | あり(より安定) |
特徴量重要度
ランダムフォレストの大きなメリットのひとつが特徴量重要度の算出です。各特徴量が全ツリーの分岐でどれだけ不純度を減らしたかを集計します。
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
# 特徴量重要度
importances = rf.feature_importances_
ハイパーパラメータ
| パラメータ | 役割 |
|---|---|
| n_estimators | ツリーの本数(多いほど安定、遅くなる) |
| max_depth | 各ツリーの最大深さ |
| max_features | 分岐候補の特徴量数(通常√n) |
| min_samples_split | 分岐に必要な最小サンプル数 |
歴史と背景
- 1994年:Breimanがバギングを提案(ランダムフォレストの前身)
- 2001年:ランダムフォレストとして正式発表
- 現在:XGBoostとともに表形式データの「定番手法」として現役