Hello there, ('ω')ノ
📌 1. 決定木(Decision Tree)とは?
決定木(Decision Tree)は、データを分岐しながら分類・予測するモデル です。
木のようにデータを分けていくことで、最終的な予測を行います。
📌 決定木の仕組み
1. 特徴量(例: 年齢, 収入)を使ってデータを分割
2. 分割を繰り返して、できるだけ純粋なグループを作る
3. 最終的に「クラス分類」や「数値予測」を行う
📌 決定木のイメージ(例: 顧客が商品を買うかどうか)
┌─────────── 年齢 < 30 ? ────────────┐ │ │ Yes(若者) No(大人) │ │ 収入 < 500万? 過去の購入履歴あり? │ │ Yes(買わない) Yes(買う)
➡ 「年齢」「収入」「購入履歴」などの特徴を使って、条件分岐しながら予測する!
✅ 分割の基準
決定木は、データを分割する際に 「どの条件で分けるのが最適か?」 を考えます。
📌 主な分割の基準
分割基準 | 説明 |
---|---|
ジニ不純度(Gini Impurity) | クラスの混ざり具合を測る(0が最も純粋) |
エントロピー(Entropy) | 情報量を使ってデータの分け方を評価 |
MSE(平均二乗誤差) | 回帰モデル(数値予測)に使用 |
➡ クラス分類では「ジニ不純度」や「エントロピー」、回帰では「MSE」を使う!
📌 2. ランダムフォレスト(Random Forest)とは?
ランダムフォレスト(Random Forest) は、複数の決定木を組み合わせて精度を向上させる手法 です。
「1本の決定木」よりも、「たくさんの決定木」を組み合わせることで、より強力な予測モデルになります。
📌 ランダムフォレストの仕組み
1. データの一部をランダムに選び、決定木を作る(ブートストラップサンプリング)
2. 各決定木が予測し、最も多い結果(分類)or 平均値(回帰)を最終予測にする
3. 複数の木を使うことで、過学習を防ぎ、汎化性能を向上させる!
➡ 「決定木 × たくさん」= ランダムフォレスト!
📌 3. Pythonで決定木&ランダムフォレストを実装
✅ ① 決定木を実装
まずは、決定木を使って Irisデータセット(花の種類の分類) を行います。
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split 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.2, random_state=42) # 決定木モデルの作成 tree_model = DecisionTreeClassifier(max_depth=3, random_state=42) tree_model.fit(X_train, y_train) # 予測 y_pred = tree_model.predict(X_test) # 精度の評価 print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")
✅ 決定木を使ってIrisデータセットを分類!
✅ max_depth=3
で木の深さを制限し、過学習を防ぐ!
✅ ② ランダムフォレストを実装
次に、ランダムフォレストを使って、同じ分類タスクを試してみましょう!
from sklearn.ensemble import RandomForestClassifier # ランダムフォレストモデルの作成 rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train, y_train) # 予測 y_pred_rf = rf_model.predict(X_test) # 精度の評価 print(f"Random Forest Accuracy: {accuracy_score(y_test, y_pred_rf):.2f}")
✅ ランダムフォレストで分類精度を向上!
✅ n_estimators=100
で100本の決定木を作成!
➡ ランダムフォレストの方が一般的に精度が高く、過学習しにくい!
📌 4. 特徴量の重要度を可視化
ランダムフォレストでは、「どの特徴が予測に重要か?」 を分析できます。
import matplotlib.pyplot as plt import numpy as np import japanize_matplotlib # ← 追加(matplotlibで日本語対応) # 特徴量の重要度を取得 feature_importances = rf_model.feature_importances_ # 棒グラフで可視化 plt.figure(figsize=(6,4)) plt.barh(iris.feature_names, feature_importances, color="skyblue") plt.xlabel("Feature Importance") plt.title("特徴量の重要度") plt.show()
✅ 「どの特徴が最も影響を与えているか?」を可視化!
✅ 不要な特徴を削除することで、よりシンプルなモデルを作れる!
📌 5. 決定木 vs ランダムフォレストの違い
決定木(Decision Tree) | ランダムフォレスト(Random Forest) | |
---|---|---|
モデルの特徴 | 1本の木 | 複数の木を組み合わせる |
メリット | シンプルで解釈しやすい | 高精度&過学習しにくい |
デメリット | 過学習しやすい | 計算コストが高い |
用途 | ルールを可視化したい場合 | 精度を重視したい場合 |
✅ 解釈のしやすさなら「決定木」!
✅ 精度を求めるなら「ランダムフォレスト」!
🎯 まとめ
✅ 決定木は「条件分岐」でデータを分類・予測する!
✅ ランダムフォレストは「多数の決定木」を組み合わせた強力なモデル!
✅ Pythonで実装し、分類タスクを試してみよう!
✅ 特徴量の重要度を可視化し、モデルの解釈を深めよう!
Best regards, (^^ゞ