permutation_importance#

sklearn.inspection.permutation_importance(estimator, X, y, *, scoring=None, n_repeats=5, n_jobs=None, random_state=None, sample_weight=None, max_samples=1.0)[source]#

特徵評估的置換重要性 [BRE]

估算器必須是一個已擬合的估算器。X可以是訓練估算器所使用的數據集,或是保留集。特徵的置換重要性計算方式如下。首先,在由X定義的(可能不同的)數據集上,評估由評分定義的基準指標。接著,將驗證集中一個特徵欄位進行置換,並再次評估該指標。置換重要性定義為基準指標與置換特徵欄位後的指標之間的差異。

請在使用者指南中閱讀更多資訊。

參數:
estimator物件

一個已擬合且與評分器相容的估算器。

Xndarray 或 DataFrame,形狀 (n_samples, n_features)

將計算置換重要性的數據。

y類陣列或 None,形狀 (n_samples, ) 或 (n_samples, n_classes)

用於監督式的目標值,或用於非監督式的 None

scoring字串、可調用物件、列表、元組或字典,預設為 None

要使用的評分器。如果 scoring 代表單一分數,可以使用

如果 scoring 代表多個分數,可以使用

  • 獨特字串的列表或元組;

  • 傳回字典的可調用物件,其中鍵為指標名稱,值為指標分數;

  • 字典,其中鍵為指標名稱,值為可調用物件。

將多個分數傳遞給 scoring 比為每個分數調用 permutation_importance 更有效率,因為它會重複使用預測以避免多餘的計算。

如果為 None,則使用估算器的預設評分器。

n_repeats整數,預設為 5

置換特徵的次數。

n_jobs整數或 None,預設為 None

並行運行的作業數量。透過計算每個欄位的置換分數,並在各欄位之間進行並行化來完成計算。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。有關更多詳細資訊,請參閱術語表

random_state整數、RandomState 實例,預設為 None

用於控制每個特徵置換的偽隨機數產生器。傳遞一個整數可在函數調用之間獲得可重複的結果。請參閱術語表

sample_weight形狀為 (n_samples,) 的類陣列,預設為 None

評分中使用的樣本權重。

在 0.24 版本中新增。

max_samples整數或浮點數,預設為 1.0

在每次重複中從 X 中抽取的樣本數量,以計算特徵重要性(不放回)。

  • 如果為整數,則抽取 max_samples 個樣本。

  • 如果為浮點數,則抽取 max_samples * X.shape[0] 個樣本。

  • 如果 max_samples 等於 1.0X.shape[0],將使用所有樣本。

雖然使用此選項可能會提供較不準確的重要性估計,但當在大型數據集上評估特徵重要性時,此方法仍可保持易於處理。結合 n_repeats,可以控制此方法的計算速度與統計準確性之間的權衡。

在 1.0 版本中新增。

傳回值:
resultBunch 或此類實例的字典

類似字典的物件,具有以下屬性。

importances_mean形狀為 (n_features, ) 的 ndarray

特徵重要性在 n_repeats 次重複中的平均值。

importances_std形狀為 (n_features, ) 的 ndarray

n_repeats 次重複中的標準差。

importances形狀為 (n_features, n_repeats) 的 ndarray

原始置換重要性分數。

如果評分參數中有多個評分指標,則 result 是一個字典,其中評分器名稱為鍵(例如 'roc_auc'),而如上的 Bunch 物件為值。

參考文獻

範例

>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.inspection import permutation_importance
>>> 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)
>>> result = permutation_importance(clf, X, y, n_repeats=10,
...                                 random_state=0)
>>> result.importances_mean
array([0.4666..., 0.       , 0.       ])
>>> result.importances_std
array([0.2211..., 0.       , 0.       ])