Scikit-learnのPermutationImportanceを使ってみた
PermutationImportance
のライブラリーは、今までは、ELI5
ELI5公式ドキュメントというライブラリーでした。
(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
が実装されたので、これでどの特徴量が影響しているか、よくわかるようになりました。