機械学習の具体的な問題にPythonを使って、機械学習もPythonも同時に学んでしまいましょう。今回はランダムフォレスト(Random Forest)を使った分類についてまとめました。ランダムフォレストは決定木を複数組み合わせて、より高精度な分類を実現するアルゴリズムです。ランダムフォレストは過学習を抑えつつ、高い予測精度を得ることができます。
この記事では scikit-learn(sklearn)ライブラリを用います。適宜
pip install scikit-learn
などによってダウンロード・インストールしてください。
ランダムフォレストの実装
ランダムフォレストでは、複数の決定木を作成し、それらの多数決で最終的な予測を決定します。1本の決定木に比べて過学習が起こりにくいという特徴があります。決定木ごとにランダムにデータを選ぶことで、多様性を持たせています。実装は以下の通りです:
from sklearn.ensemble import RandomForestClassifier import numpy as np # サンプルデータ(特徴量Xとクラスy) X = np.array([[1], [2], [3], [6], [7], [8]]) # 特徴量 y = np.array([0, 0, 0, 1, 1, 1]) # クラス(0 or 1) # モデル作成(決定木を5本使用) model = RandomForestClassifier(n_estimators=5, max_depth=3, random_state=42) model.fit(X, y) # 予測 X_test = np.array([[4], [5]]) # 新しいデータ y_pred = model.predict(X_test) print("予測結果:", y_pred) # 4と5はどのクラスに分類されるか?
予測結果: [0 1]
ポイント
- RandomForestClassifier(n_estimators=5, max_depth=3, random_state=42)
- 5本の決定木を使い、最大深さ3、ランダムシード42で学習
- model.fit(X, y) で学習
- model.predict(X_test) で分類
特徴量の重要度の可視化
ランダムフォレストでは、各特徴量がどれだけ予測に重要だったのかを数値化することができます。この分析は、どのデータが分類に影響を与えているかを知るうえで役に立ちます。特徴量の重要度は、各決定木でどの特徴がどれだけデータを分割するのに寄与したかを集計することによって測ります。数値がより高いほどより重要な特徴であることが示唆されます。
import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier # サンプルデータ(2つの特徴量を持つ) X = np.array([[1, 2], [2, 3], [3, 1], [6, 5], [7, 8], [8, 6]]) # 特徴量 y = np.array([0, 0, 0, 1, 1, 1]) # クラス(0 or 1) # モデル作成(決定木を10本使用) model = RandomForestClassifier(n_estimators=10, max_depth=3, random_state=42) model.fit(X, y) # 特徴量の重要度を取得 feature_importance = model.feature_importances_ # グラフ描画 plt.bar(["Feature 1", "Feature 2"], feature_importance, color=['blue', 'red']) plt.title("Visualization of Importance") plt.xlabel("Feature") plt.ylabel("Importance") plt.show()

ポイント
- model.feature_importances_ で各特徴量の重要度を取得
- plt.bar() で 棒グラフを作成