Closed7
特徴量の重要度評価 ~ "Feature Importance"と"Permutation Importance"の比較 ~
Feature Importanceとは
各特徴量のターゲトの分類寄与率を評価する指標である。
より詳細には、「ある特徴量で分割することでどれくらいジニ不純度を下げられるのか」ということになる。
理論的には、ジニ不純度(Gini impurity)をもとに計算されている。
メリット
木構造アルゴリズムの特性を踏まえた特徴量評価ができる
デメリット
- 木構造のアルゴリズム以外で使えない
- 学習データに対する評価しかできない(ゆえに、特徴量が予測精度にどれだけ貢献しているかはわからない)
Permutation Importanceとは
「ある特徴量がどれだけモデルの予測精度向上に寄与しているのか」を評価する手法である。
ある特徴量をランダムに並べ替えることで、予測精度にどのくらい影響を計算する。
メリット
Feature Importance
のデメリットを解消できる。
デメリット
ない?
ジニ不純度を使ったほうが良い場面はあるのか?
参考記事のまとめ
疑問
調査した限りPermutation Importance
を使っておくのが無難という感想を得た。
Feature Importance
を使ったほうがよい場面はあるのだろうか?
Permutation Importanceのサンプル
すごく簡単な例で、Permutation Importance
の出力結果をみてみる。
from sklearn.linear_model import LogisticRegression
from sklearn.inspection import permutation_importance
#
# Xの0カラム目が1のときは、y=1, Xの1カラム目が0のときは、y=1を出力するように学習
#
X = [[1, 9, 9],[1, 9, 9],[1, 9, 9],
[0, 9, 9],[0, 9, 9],[0, 9, 9]]
y = [1, 1, 1, 0, 0, 0]
clf = LogisticRegression().fit(X, y)
#
# Permutation Importanceの評価
#
X_test = [[1, 9, 9], [0, 9, 9]]
y_test = [1, 0]
result = permutation_importance(clf, X_test, y_test, n_repeats=10,
random_state=0)
# 0カラム目をランダムに入れ替えたら、0.3の精度劣化がある
print(result.importances_mean) # out => [0.3 0. 0. ]
上記のコードに対して、X_testのカラムを入れかえる。
from sklearn.linear_model import LogisticRegression
from sklearn.inspection import permutation_importance
#
# Xの0カラム目が1のときは、y=1, Xの1カラム目が0のときは、y=1を出力するように学習
#
X = [[1, 9, 9],[1, 9, 9],[1, 9, 9],
[0, 9, 9],[0, 9, 9],[0, 9, 9]]
y = [1, 1, 1, 0, 0, 0]
clf = LogisticRegression().fit(X, y)
#
# Permutation Importanceの評価
#
X_test = [[0, 9, 9], [1, 9, 9]] # 0と1カラム目をいれかえる。
y_test = [1, 0]
result = permutation_importance(clf, X_test, y_test, n_repeats=10,
random_state=0)
# 0カラム目をランダムに入れ替えたら、0.3の精度が上昇した。(つまり、0カラム目は、学習モデルが期待どおりに作用していない。)
print(result.importances_mean) # out => [-0.3 0. 0. ]
Google Trendsで調査した結果
このスクラップは2021/04/13にクローズされました