はじめに
この実験では、予測モデルにおける特徴量の重要度を決定するために使用されるパーミュテーション特徴量重要度法について学びます。この手法は、解釈が難しい非線形または不透明なモデルに対して特に役立つ場合があります。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
データセットの読み込み
まず、予測モデルを訓練するために使用できるデータセットを読み込む必要があります。scikit - learn の Diabetes データセットを使用します。このデータセットには糖尿病患者に関する情報が含まれています。
from sklearn.datasets import load_diabetes
## Load the Diabetes dataset
diabetes = load_diabetes()
## Split the data into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(diabetes.data, diabetes.target, random_state=0)
モデルの訓練
次に、訓練データに対して回帰モデルを訓練します。この例では、Ridge 回帰モデルを使用します。
from sklearn.linear_model import Ridge
## Train the Ridge regression model
model = Ridge(alpha=1e-2).fit(X_train, y_train)
モデルの評価
次に、検証セットを使って訓練済みのモデルを評価します。ここで使用する評価指標は決定係数(R-squared score)です。
## Evaluate the model on the validation set
score = model.score(X_val, y_val)
print("Validation score:", score)
パーミュテーション特徴量重要度の計算
次に、scikit - learn のpermutation_importance関数を使ってパーミュテーション特徴量重要度を計算します。この関数は、訓練済みのモデル、検証セット、および特徴量を入れ替える回数を入力として受け取ります。
from sklearn.inspection import permutation_importance
## Calculate permutation feature importance
result = permutation_importance(model, X_val, y_val, n_repeats=30, random_state=0)
## Print the feature importances
for i in result.importances_mean.argsort()[::-1]:
if result.importances_mean[i] - 2 * result.importances_std[i] > 0:
print(f"{diabetes.feature_names[i]}: {result.importances_mean[i]:.3f} +/- {result.importances_std[i]:.3f}")
結果の解釈
算出された特徴量の重要度は、単一の特徴量値をランダムに入れ替えたときのモデルスコアの低下を表します。重要度の値が高い特徴量は、モデルが予測においてそれらの特徴量により大きく依存していることを示します。
この例では、モデルの性能に最も寄与する上位の特徴量は「s5」、「bmi」、「bp」、および「sex」です。
まとめ
この実験では、予測モデルにおける特徴量の重要度を評価するためのパーミュテーション特徴量重要度法について学びました。データセットの読み込み、モデルの訓練、モデルの評価、特徴量重要度の計算、および結果の解釈の手順を通りました。この方法は、どの特徴量が最も予測的であり、モデルが各特徴量にどれだけ依存しているかを理解するのに役立ちます。