【分類③】決定木・ランダムフォレストの特徴と可視化方法

はじめに

これまでに紹介したK近傍法やロジスティック回帰は、比較的単純な分類モデルでした。今回紹介する「決定木(Decision Tree)」と「ランダムフォレスト(Random Forest)」は、より柔軟で複雑な分類タスクに対応できるアルゴリズムです。

本記事では、両者の基本的な特徴・仕組み・scikit-learnを用いた実装方法と、分類の可視化を通して理解を深めていきます。


決定木とは?

ポイント

  • 「Yes/No」の質問を繰り返して分類していく構造(ツリー型)
  • データの特徴に基づいて分割し、最終的に葉ノードに分類結果を割り当てる
  • 可視化や解釈がしやすく、シンプルな直感モデル

メリット・デメリット

メリットデメリット
可視化しやすい過学習しやすい
非線形な境界にも対応データの分割に敏感

ランダムフォレストとは?

ポイント

  • 複数の決定木を使ったアンサンブル学習
  • 各木はランダムに異なる特徴量・サンプルで学習
  • 複数の予測を多数決でまとめる → 過学習に強く、精度が高い

メリット・デメリット

メリットデメリット
精度が高く安定処理が重くなりやすい
過学習しにくいモデル解釈が難しくなる

実装:Irisデータで比較する

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# データ読み込み
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 決定木モデル
tree_model = DecisionTreeClassifier(max_depth=3, random_state=42)
tree_model.fit(X_train, y_train)
tree_pred = tree_model.predict(X_test)
print("決定木 正解率:", accuracy_score(y_test, tree_pred))

# ランダムフォレストモデル
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_pred = rf_model.predict(X_test)
print("ランダムフォレスト 正解率:", accuracy_score(y_test, rf_pred))

決定木の可視化(Graphviz使用)

from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 8))
plot_tree(tree_model, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.title("決定木の構造")
plt.show()

特徴量の重要度を確認する(ランダムフォレスト)

import pandas as pd
import numpy as np

importances = rf_model.feature_importances_
features = iris.feature_names
importance_df = pd.DataFrame({"特徴量": features, "重要度": importances})
print(importance_df.sort_values("重要度", ascending=False))

これは「どの特徴量が分類にどれくらい貢献したか」を数値で見るための便利な方法です。


おわりに

決定木は「見える分類モデル」、ランダムフォレストは「精度の高い分類モデル」として、それぞれに特長があります。実務ではランダムフォレストがよく使われますが、決定木で分類の構造を理解してから使うと効果的です。

次回は、線形回帰を使って数値予測を行う「回帰問題」に入ります。


練習問題

Q1. 決定木が過学習しやすい理由はどれ?

  • A. ノード数が多すぎると細かくなりすぎるから
  • B. ルールが単純すぎて分類できないから
  • C. ランダム性がないから

Q2. ランダムフォレストで特徴量の重要度が高いとは?

  • A. 分類には関係ない特徴である
  • B. その特徴が多くの決定に影響している
  • C. ランダムに選ばれただけで意味はない

Q3. n_estimators は何を表している?

  • A. 使用する特徴量の数
  • B. 作成する決定木の本数
  • C. 正解クラスの数

🔗 機械学習シリーズ 関連リンク

▶ 入門〜分類編

▶ 回帰編

▶ 応用編

コメント

タイトルとURLをコピーしました