はじめに
分類タスクにおいて、さまざまなモデルが利用できますが、どれを選べばよいのでしょうか?
本記事では代表的な分類アルゴリズムである以下3つのモデルについて、精度と解釈性(説明のしやすさ)の観点から比較します。
- サポートベクターマシン(SVM)
- 決定木(Decision Tree)
- ランダムフォレスト(Random Forest)
同じデータセットで学習させた上で、精度と可視化を通して、それぞれのモデルの特徴を明らかにします。
データセットと共通処理の準備
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report
# データ読み込みと前処理
X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)モデル①:SVM(サポートベクターマシン)
from sklearn.svm import SVC
model_svm = SVC(kernel='rbf')
model_svm.fit(X_train, y_train)
y_pred_svm = model_svm.predict(X_test)
print("[SVM]")
print(classification_report(y_test, y_pred_svm))特徴
- 高次元でも有効
- 精度が高い傾向がある
- ハイパーパラメータ調整がやや難しい
- ブラックボックス的で解釈しにくい
モデル②:決定木
from sklearn.tree import DecisionTreeClassifier
model_tree = DecisionTreeClassifier(max_depth=4, random_state=42)
model_tree.fit(X_train, y_train)
y_pred_tree = model_tree.predict(X_test)
print("[Decision Tree]")
print(classification_report(y_test, y_pred_tree))特徴
- 可視化と解釈性に優れる
- 単純で直感的なモデル
- 過学習しやすいが調整しやすい(max_depth など)
モデル③:ランダムフォレスト
from sklearn.ensemble import RandomForestClassifier
model_rf = RandomForestClassifier(n_estimators=100, random_state=42)
model_rf.fit(X_train, y_train)
y_pred_rf = model_rf.predict(X_test)
print("[Random Forest]")
print(classification_report(y_test, y_pred_rf))特徴
- 多数の決定木を使ったアンサンブル学習
- 精度が高く安定している
- 単一の木より過学習しにくい
- 解釈は難しくなる(ブラックボックス化)
可視化:決定木の構造を確認
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
plot_tree(model_tree, feature_names=load_wine().feature_names, class_names=load_wine().target_names, filled=True)
plt.title("決定木の可視化")
plt.show()精度・解釈性のまとめ
| モデル | 精度 | 解釈性 | コメント |
|---|---|---|---|
| SVM | ◎ | △ | 高精度だがブラックボックス性あり |
| 決定木 | ○ | ◎ | 可視化しやすく説明向き |
| ランダムフォレスト | ◎ | △ | 高精度かつ頑健、解釈は難しい |
おわりに
機械学習では「精度」だけでなく、「何のために使うのか・誰に説明するのか」によってモデル選択が変わります。
- 実務での説得力が必要 → 決定木
- 精度重視のプロトタイプ → ランダムフォレスト or SVM
- 処理の速度や可視化重視 → 単純な決定木
それぞれの特性を活かして、目的に合ったモデル選択を行いましょう。
練習問題
Q1. ランダムフォレストの強みは?
- A. 非線形データが扱えない
- B. 過学習が極端に起きやすい
- C. 精度が安定しやすい
Q2. SVMのデメリットとして正しいのは?
- A. 精度が低い
- B. 解釈しにくい
- C. 特徴量が1つしか使えない
Q3. 決定木が優れている点は?
- A. モデルが非常に小さいため予測できない
- B. 可視化と説明のしやすさ
- C. 他のモデルに比べて常に高精度
🔗 機械学習シリーズ 関連リンク
▶ 入門〜分類編
- 【入門】scikit-learnとは?機械学習の全体像と学習の流れ
- 【準備】sklearnのインストールとデータセットの扱い方
- 【分類①】K近傍法(KNN)を使ってシンプルな分類をしてみよう
- 【分類②】ロジスティック回帰でスパム判定をしてみよう
- 【分類③】決定木・ランダムフォレストの特徴と可視化方法
- 【分類④】混同行列・精度・再現率・F1スコアの正しい使い方
- 【モデル比較】SVM・決定木・ランダムフォレストの精度と解釈性の違い

コメント