決定木とランダムフォレストの分類問題での使用
決定木(Decision Tree)とランダムフォレスト(Random Forest)は、分類や回帰に使用される代表的な教師あり学習アルゴリズムです。本記事では、分類問題に焦点を当て、決定木とランダムフォレストの基本的な仕組みと、Pythonでの実装方法について解説します。
決定木の基礎
決定木は、データを木構造に基づいて分類するアルゴリズムです。木の各ノードは特徴量に基づく条件分岐を表し、リーフノードは最終的なクラスラベルを表します。データが木のルートからスタートし、条件に従って分岐を繰り返すことで、最終的な予測クラスに到達します。
- 根ノード(Root Node):すべてのデータポイントがスタートするノードです。
- 内部ノード(Internal Node):特徴量に基づいてデータを分割するノード。
- 葉ノード(Leaf Node):分類結果を表すノード。
決定木の長所は、解釈が容易であり、視覚化も可能な点です。一方で、過学習しやすいという欠点があります。
ランダムフォレストの基礎
ランダムフォレストは、複数の決定木を使って分類や回帰を行うアンサンブル学習の手法です。各決定木はランダムに選ばれたデータのサブセットと特徴量を使って学習され、その結果を統合して最終予測を行います。これにより、過学習のリスクを減少させ、汎化性能を向上させます。
- バギング(Bagging):データのサブセットをランダムに抽出し、複数のモデルを学習させる手法。
- 特徴量のランダム選択:各決定木において、全特徴量のうち一部をランダムに選び、分割基準に使用します。
決定木のPython実装
Pythonのscikit-learnライブラリを使用して、決定木の分類モデルを実装してみましょう。今回は、Irisデータセットを使って、分類モデルを構築します。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# データセットのロード
iris = datasets.load_iris()
X = iris.data
y = iris.target
# データを訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 決定木モデルの作成
clf = DecisionTreeClassifier()
# モデルの訓練
clf.fit(X_train, y_train)
# テストデータでの予測
y_pred = clf.predict(X_test)
# 精度の評価
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
上記のコードでは、Irisデータセットを使って決定木モデルを訓練し、テストデータで精度を評価しています。
ランダムフォレストのPython実装
次に、ランダムフォレストを使った分類モデルを実装してみましょう。
from sklearn.ensemble import RandomForestClassifier
# ランダムフォレストモデルの作成
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)
# モデルの訓練
rf_clf.fit(X_train, y_train)
# テストデータでの予測
y_pred_rf = rf_clf.predict(X_test)
# 精度の評価
accuracy_rf = accuracy_score(y_test, y_pred_rf)
print(f"Random Forest Accuracy: {accuracy_rf}")
このコードでは、ランダムフォレストを使って分類モデルを構築し、100本の決定木を使ってアンサンブル学習を行います。これにより、単一の決定木よりも高い精度が期待できます。
決定木とランダムフォレストの比較
| 特徴 | 決定木 | ランダムフォレスト |
|---|---|---|
| 過学習のリスク | 高い | 低い(バギングにより抑制される) |
| 解釈性 | 高い | 低い(複数の木を使うため視覚化が難しい) |
| 計算コスト | 低い | 高い(複数の木を使うため) |
| 汎化性能 | 低い | 高い |
結論
決定木はシンプルで解釈しやすいモデルですが、過学習のリスクが高いため、慎重な調整が必要です。一方、ランダムフォレストは、バギングや特徴量のランダム選択により、より高い汎化性能を持ち、分類問題において強力なツールです。実際のタスクにおいては、データの性質や計算リソースに応じてこれらのアルゴリズムを使い分けることが重要です。