特征重要性之排列重要性Permutaion Importance


基於模型刷選特征方法有:排列重要性、shap value、null importance

這里簡單介紹一下排列重要性:

一、排列重要性原理

首先建立一個模型,計算某列特征重要性時,打亂該列順序,其余列不變,然后再使用打亂后的數據來預測,最后計算正確率;如果某列對模型預測很重要,那么打亂該列順序之后,模型預測正確率就會很差,如果對預測結果沒有影響,則說明該變量對模型沒有那么重要;為了消減隨機對結果的影響,我們會多次亂打,再求均值和方差。

 

二、排列重要性的好處

  1. 計算速度快
  2. 應用廣泛、易於理解
  3. 與我們期望一個特征重要性度量所具有的性質一致

三、排列重要性如何使用Python實現

1.可以直接eli5庫計算和展示排列重要性

# -*- coding: utf-8 -*-
"""
Created on Sun Sep 26 15:51:26 2021

@author: chenguimei
"""

# 引入數據
from sklearn import datasets
import pandas as pd
import numpy as np

iris = datasets.load_iris()
X = pd.DataFrame(iris.data)
X.columns = iris.feature_names
y = iris.target
print("Class labels:",np.unique(y))  #打印分類類別的種類


# 切分訓練數據和測試數據
from sklearn.model_selection import train_test_split
## 30%測試數據,70%訓練數據,stratify=y表示訓練數據和測試數據具有相同的類別比例
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)


#決策樹模型  
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(criterion='gini',max_depth=4,random_state=1)
tree.fit(X_train,y_train)
print(X.columns,tree.feature_importances_)

from sklearn.metrics import roc_curve, auc
resu = tree.predict(X_test)
print(resu)
print(y_test)


import eli5
from eli5.sklearn import PermutationImportance

perm = PermutationImportance(lr, random_state=1).fit(X_test, y_test)
eli5.show_weights(perm, feature_names = X_test.columns.tolist())

 

 2.sklearn.inspection._permutation_importance 的permutation_importance

from sklearn.inspection._permutation_importance import permutation_importance
from sklearn.datasets import load_iris
from sklearn.metrics import get_scorer
from sklearn.linear_model import LogisticRegression


permutation_importance(tree, X_test, y_test, get_scorer('accuracy'))

 

 

文章強調2點:(1)打亂順序;(2)使用准確率指標衡量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM