ランダムフォレスト(Random Forests)は、複数の決定木を組み合わせて分類や回帰を行うアンサンブル学習アルゴリズムです。以下に、ランダムフォレストの主要な特徴と概念をまとめます。
ランダムフォレストの基本概念
- 原理:
ランダムフォレストは、複数の決定木を構築し、それぞれの木の予測結果を多数決または平均して最終予測を行い - バギング(Bagging):
ブートストラップ法を用いてデータのサブセットを生成し、それぞれのサブセットで決定木を学習します。これにより、モデルのバリアンスを低減し - 特徴量のランダムサンプリング:
各決定木の分岐点(ノード)を作成する際に、全ての特徴量を使用するのではなく、ランダムに選ばれた一部の特徴量のみを使用し
ランダムフォレストのアルゴリズム
- データのサンプリング:
トレーニングデータからブートストラップサンプリングを行い、複数のサブセットを生成し - 決定木の構築:
各サブセットに対して決定木を構築します。この際、各ノードで使用する特徴量をランダムに選び - 予測の統合:
全ての決定木の予測結果を多数決(分類の場合)または平均(回帰の場合)して、最終予測を行い
数式
1. ブートストラップサンプリング
各決定木のトレーニングデータを生成するために、元のデータセットから重複を許してサンプリングを行います。
2. 決定木の構築
各決定木のノード分割は、次のように行います:
tex
\text{選ばれた特徴量の中で最も良い分割を見つける}
3. 最終予測
分類の場合、最終予測は多数決で決定されます:
tex
\hat{y} = \text{mode}\{ \hat{y}_1, \hat{y}_2, \ldots, \hat{y}_M \}
回帰の場合、最終予測は平均で決定されます:
tex
\hat{y} = \frac{1}{M} \sum_{m=1}^{M} \hat{y}_m
利点と欠点
利点
- 高い精度: 多数の決定木を組み合わせることで、単一の決定木よりも高い精度を実現します。
- 過学習の抑制: バギングと特徴量のランダムサンプリングにより、過学習を抑制します。
- 特徴量の重要度評価: 各特徴量の重要度を評価することができます。
欠点
- 計算コスト: 多数の決定木を構築するため、計算コストが高くなります。
- 解釈の難しさ: 単一の決定木に比べて、モデルの解釈が難しくなります。
実装例 (Python/scikit-learn)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# データの準備
iris = load_iris()
data = iris['data']
target = iris['target']
X_train, X_test, Y_train, Y_test = train_test_split(data, target, test_size=0.3, random_state=42)
# モデルの作成と学習
rf = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=42)
rf.fit(X_train, Y_train)
# 精度の評価
test_accuracy = rf.score(X_test, Y_test)
oob_accuracy = rf.oob_score_
print(f"Test Data Accuracy: {test_accuracy}")
print(f"OOB Data Accuracy: {oob_accuracy}")
参考文献
ランダムフォレストは、その高い精度と過学習の抑制能力から、機械学習の多くの分野で広く利用されています。