3
5

More than 3 years have passed since last update.

私を5歳児だと思ってScikit-learnのPermutation_Importanceを教えてください。

Posted at

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が実装されたので、これでどの特徴量が影響しているか、よくわかるようになりました。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5