Scikit-learnのPermutationImportanceを使ってみた
PermutationImportanceのライブラリーは、今までは、ELI5ELI5公式ドキュメントというライブラリーでした。
(ELI5とはExplain Like I'm 5.(私を5歳児だと思って説明して)の略です。)
最近、Scikit-Learn0.22からPermutationImportanceが実装されました。今までサポートベクターで計算した後は、特徴量の何が寄与したかよくわからなかったのですが、今後は、PermutationImportanceで特徴量の何が重要か見ることができるようになりました。
PermutationImportanceは、簡単に言うと、特徴量の中の一つを選ぶ、その中の値をシャッフルして意味のない数値にします。そのデータを用いて精度を求め、正しい特徴量のデータセットと精度の比較をし、選んだ特徴量がどれくらい精度に影響しているのか計算するものです。
計算するのは結構簡単でした。
sklearn.inspectionからpermutation_importanceをインポートします。
サポートベクターでパラメーターをoputunaで最適化して作ったインスタンスoptimised_regrと、データセットを、permutation_importanceの引数として読み込ませて計算するだけでした。
# ここからsklearnのpermutation_importanceです
from sklearn.inspection import permutation_importance
result = permutation_importance(optimised_regr, X_test_std, y_test, n_repeats=10, n_jobs=-1, random_state=0)
# 結果をPandasのデータフレームに入れて、表示します
df = pd.DataFrame([boston.feature_names,result.importances_mean,result.importances_std],index=['Featue','mean','std']).T
df_s = df.sort_values('mean',ascending=False)
print(df_s)
結果をpandasに読み込んで表にしてみました。
| Featue | mean | std | |
|---|---|---|---|
| 5 | RM | 0.466147 | 0.066557 | 
| 12 | LSTAT | 0.259455 | 0.0525053 | 
| 8 | RAD | 0.141846 | 0.0203266 | 
| 9 | TAX | 0.113393 | 0.0176602 | 
| 7 | DIS | 0.0738827 | 0.0178893 | 
| 10 | PTRATIO | 0.0643727 | 0.0205021 | 
| 6 | AGE | 0.0587429 | 0.010226 | 
| 4 | NOX | 0.0521941 | 0.0235265 | 
| 2 | INDUS | 0.0425453 | 0.0185133 | 
| 0 | CRIM | 0.0258689 | 0.00711088 | 
| 11 | B | 0.017638 | 0.00689625 | 
| 3 | CHAS | 0.0140639 | 0.00568843 | 
| 1 | ZN | 0.00434593 | 0.00582095 | 
サポートベクターでの計算だと、今まではどの特徴量が影響していたかわかりませんでしたが、permutation_importanceが実装されたので、これでどの特徴量が影響しているか、よくわかるようになりました。
