決定木とランダムフォレストの分類問題での使用 | 分類アルゴリズム | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

決定木とランダムフォレストの分類問題での使用

決定木(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本の決定木を利用してランダムフォレストを構築しています。各決定木の結果を統合することで、単独の決定木よりも安定した予測が期待できます。

決定木とランダムフォレストの比較

特徴 決定木 ランダムフォレスト
過学習のリスク 高い 比較的低い
解釈性 高い 低い
計算コスト 低い 高い
予測精度 状況による 高くなることが多い
汎化性能 低くなりやすい 高くなりやすい

決定木が向いているケース

  • 予測結果の理由を説明したい場合
  • モデルを可視化したい場合
  • 比較的小規模なデータを扱う場合

ランダムフォレストが向いているケース

  • 高い予測精度を重視する場合
  • 過学習を抑えたい場合
  • 特徴量が多いデータを扱う場合

まとめ

決定木はシンプルで解釈しやすい分類アルゴリズムですが、過学習が発生しやすい特徴があります。一方、ランダムフォレストは複数の決定木を組み合わせることで予測の安定性を高め、過学習を抑えながら高い精度を実現できます。用途に応じて両者を使い分けることが重要です。