古典的機械学習

ランダムフォレスト らんだむふぉれすと

ランダムフォレストアンサンブル学習バギング特徴量重要度決定木
ランダムフォレストについて教えて

簡単に言うとこんな感じ!

たくさんの決定木を作って、多数決で予測するモデルだよ。「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とともに表形式データの「定番手法」として現役

関連用語