1 概要と歴史

1.1 定義

ランダムフォレスト(Random Forest)は、アンサンブル学習の一種であり、複数の決定木を構築しそれらの予測を統合する手法である。各決定木は、ブートストラップサンプリングバギング)とランダムな特徴量選択を用いて学習され、最終的な予測分類問題では多数決、回帰問題では平均によって得られる。この手法は、単一の決定木に比べて過学習を抑制し、高い汎化性能ロバスト性を実現する。

1.2 背景と発展

ランダムフォレストは、2001年にレオ・ブレイマン(Leo Breiman)によって体系的に提案された。その根底には、1990年代にブレイマン自身が開発したバギング(Bootstrap Aggregating)のアイデアと、Tin Kam Hoらによるランダム部分空間法(Random Subspace Method)の概念がある。ブレイマンはこれらを統合し、決定木のノード分割時に使用する特徴量をランダムに制限する手法を導入することで、木間の相関を低減し、アンサンブル全体の性能を向上させた。以降、ランダムフォレストは機械学習の標準的なベースライン手法として広く普及し、様々な応用や拡張が研究されている。

2 アルゴリズムの詳細

2.1 バギング(Bootstrap Aggregating)

バギングは、元の訓練データから復元抽出により複数のブートストラップサンプルを生成し、それぞれのサンプルで決定木を学習する手法である。これにより、各木の訓練データが異なるため、個々の木の予測の分散が小さくなり、アンサンブル全体の分散も低減される。ランダムフォレストでは、このバギングに加えて特徴量のランダム選択を併用することで、さらに多様性を高めている。

2.2 決定木の構築

2.2.1 ランダムな特徴量選択

各決定木のノード分割において、使用可能な全特徴量からランダムに選ばれた部分集合(通常は全特徴量の平方根程度)のみを分割候補とする。これにより、各木が異なる特徴量に注目するようになり、木間の相関が低くなり、アンサンブルの性能が向上する。

2.2.2 分割基準ジニ係数情報利得平均二乗誤差

決定木の分割基準は問題の種類によって異なる。分類問題では、ジニ係数(不純度指標)や情報利得(エントロピーの減少)が用いられる。回帰問題では、平均二乗誤差(MSE)の減少が基準となる。ランダムフォレストの実装では、分割時に選択された特徴量の部分集合の中で、これらの基準を最適化する分割点が選ばれる。

2.3 予測の統合

2.3.1 分類における多数決

分類問題では、構築されたすべての決定木がそれぞれクラスラベルを予測し、その中で最も多く投票されたクラスを最終的な予測結果とする。多数決により、個々の木のバイアス平均化され、ロバストな分類が可能となる。

2.3.2 回帰における平均

回帰問題では、各決定木が出力する数値予測平均値を最終的な予測値とする。平均化により、外れ値の影響が緩和され、安定した回帰が実現される。

3 重要な概念と特性

3.1 アウト・オブ・バッグ(OOB)誤差

ランダムフォレストでは、各決定木の学習に使用されなかったサンプル(アウト・オブ・バッグサンプル)を用いて、内部で交差検証の誤差を推定できる。このOOB誤差は、テストデータを使わずにモデルの汎化性能を評価する便利な指標であり、通常は交差検証とよく一致する。

3.2 特徴量重要度

3.2.1 ジニ重要度

ジニ重要度は、各特徴量が決定木のノード分割に使用された際のジニ係数の減少量を全木で合計した値であり、特徴量が分類にどの程度貢献したかを示す。数値が大きいほど重要な特徴量と解釈される。

3.2.2 順列重要度

順列重要度は、ある特徴量の値をランダムにシャッフルしたときの予測精度の低下度合いを測定する手法である。特徴量が重要であれば、その値をランダムにすると精度が大きく低下する。モデルに依存しない方法であり、ジニ重要度よりも信頼性が高い場合がある。

3.3 プロキシミティ(近接度)行列

プロキシミティ行列は、訓練サンプル同士が同一の葉ノードに落ちた頻度を全木で集計した行列である。この行列は、サンプル間の類似度を表し、クラスタリングや外れ値検出、欠損値補完などに利用できる。

4 利点と欠点

4.1 利点

4.1.1 過学習の抑制

ランダムフォレストは、多数の決定木の予測を平均化することで、個々の木が過学習してもアンサンブル全体では頑健になり、高い汎化性能を維持する。

4.1.2 欠損値への頑健性

一部の実装では、欠損値を含む特徴量を代理分割(surrogate splits)で処理するなど、欠損値に対して自然に耐性を持つ。また、OOBサンプルを用いた欠損値補完も可能である。

4.1.3 高次元データへの適応性

特徴量数が多くても、ノード分割時にランダムに特徴量を選択するため、過学習を起こしにくく、高次元データでも良好な性能を発揮する。

4.2 欠点

4.2.1 解釈性の低下

ランダムフォレストは、単一の決定木と異なり、多くの木から構成されるため、予測の根拠を人間が直感的に理解することが難しい。特徴量重要度である程度の解釈は可能だが、詳細な決定ルールの可視化は困難である。

4.2.2 計算コストの増加

多数の決定木を構築するため、訓練に時間とメモリを要する。また、予測時にもすべての木を評価する必要があり、特に木の数が多い場合はリアルタイム性が要求される場面で課題となる。

5 応用分野

5.1 分類問題

5.1.1 医療診断

病歴や検査データから疾患の有無を予測するタスクで広く利用される。例えば、腫瘍の良性・悪性の分類、糖尿病や心臓病のリスク評価などに応用されている。

5.1.2 スパム検出

メールのヘッダーや本文の特徴量から、スパムメールか否かを分類する問題で効果を発揮する。特徴量数が多く非線形な関係がある場合でも、ロバストな分類が可能である。

5.2 回帰問題

5.2.1 株価予測

過去の株価データや経済指標から将来の株価を予測する回帰モデルとして使われる。ノイズの多い金融データに対しても、過学習を抑えながら予測を行える。

5.2.2 不動産価格推定

物件の広さ、立地、築年数などの特徴から不動産価格を推定する問題に適用される。非線形な影響を捉えやすく、実用的な精度が得られる。

5.3 異常検知とその他

ランダムフォレストは、プロキシミティ行列を用いた異常値検出(外れ値スコアの計算)や、アイソレーションフォレスト(後述)のベースとしても利用される。また、特徴量重要度を利用した特徴量選択の前処理としても広く使われる。

6 バリエーションと拡張

6.1 エクストリームリー・ランダマイズド・ツリー(Extra-Trees)

Extra-Trees(極端にランダム化された木)は、ノード分割時にランダムに分割点を選択する点が特徴である。バギングではなく全データを使用し、分割点もランダムに選ぶため、計算コストが低く、分散がさらに低減される。ただしバイアスがやや大きくなる場合がある。

6.2 加重ランダムフォレスト

各決定木の予測に重みを付けて統合する手法である。重みはOOB誤差や交差検証の性能に基づいて計算され、性能の良い木の寄与を大きくすることで、全体の精度を向上できる。

6.3 アイソレーションフォレスト

異常検知に特化した手法で、ランダムフォレストと同様に多数の木を構築するが、分割点をランダムに選び、異常値が早期に分離される性質を利用する。通常のランダムフォレストとは異なり、スコアの計算に経路長を用いる。

6.4 ランダムフォレストを用いた教師なし学習

プロキシミティ行列を用いてクラスタリングを行う方法や、人工的に生成したデータとの識別を学習することでデータの分布を捉える手法がある。これにより、ラベルなしデータの構造を解析できる。

7 関連手法との比較

7.1 勾配ブースティング(XGBoost, LightGBM)との違い

勾配ブースティングは、逐次的に決定木を追加し、前の木の誤差を補正するように学習する。一方、ランダムフォレストは各木を独立に並列学習するため、訓練が高速で過学習に強い。ブースティングは一般に高精度だが、ハイパーパラメータの調整が難しく、過学習しやすい。ランダムフォレストはパラメータに対して頑健であり、ベースラインとして広く用いられる。

7.2 単一決定木との比較

単一決定木は解釈性が高いが、過学習しやすく、小さなデータの変動に敏感である。ランダムフォレストは木の数とランダム化によりこれを改善し、汎化性能が大幅に向上する。ただし解釈性は犠牲になる。

8 実装とツール

8.1 主要ライブラリ(scikit-learn, R randomForest)

Pythonではscikit-learnのRandomForestClassifierおよびRandomForestRegressorが標準的であり、デフォルトの設定でも良好な性能を発揮する。R言語ではrandomForestパッケージが広く利用されており、ブレイマンのオリジナル実装に近い。これら以外にも、並列処理に特化した実装やGPU対応のライブラリも存在する。

8.2 パラメータ調整の指針

主要な調整パラメータとして、決定木の本数(n_estimators)、特徴量のランダム選択数(max_features)、木の深さの制限(max_depth)、ノードの最小サンプル数(min_samples_split)などがある。一般的に、木の本数は多いほど安定するが計算コストが増大するため、OOB誤差が収束する点を目安にする。max_featuresは分類では特徴量数の平方根、回帰では三分の一程度が標準とされる。max_depthmin_samples_splitは過学習を防ぐために適度に制限すると良い。グリッドサーチやランダムサーチを用いてクロスバリデーションで最適化することが推奨される。