はじめに
これまでに紹介した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. 正解クラスの数
🔗 機械学習シリーズ 関連リンク
▶ 入門〜分類編
- 【入門】scikit-learnとは?機械学習の全体像と学習の流れ
- 【準備】sklearnのインストールとデータセットの扱い方
- 【分類①】K近傍法(KNN)を使ってシンプルな分類をしてみよう
- 【分類②】ロジスティック回帰でスパム判定をしてみよう
- 【分類③】決定木・ランダムフォレストの特徴と可視化方法
- 【分類④】混同行列・精度・再現率・F1スコアの正しい使い方
- 【モデル比較】SVM・決定木・ランダムフォレストの精度と解釈性の違い

コメント