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.0
或X.shape[0]
,將使用所有樣本。
雖然使用此選項可能會提供較不準確的重要性估計,但當在大型數據集上評估特徵重要性時,此方法仍可保持易於處理。結合
n_repeats
,可以控制此方法的計算速度與統計準確性之間的權衡。在 1.0 版本中新增。
- 傳回值:
- result
Bunch
或此類實例的字典 類似字典的物件,具有以下屬性。
- importances_mean形狀為 (n_features, ) 的 ndarray
特徵重要性在
n_repeats
次重複中的平均值。- importances_std形狀為 (n_features, ) 的 ndarray
在
n_repeats
次重複中的標準差。- importances形狀為 (n_features, n_repeats) 的 ndarray
原始置換重要性分數。
如果評分參數中有多個評分指標,則
result
是一個字典,其中評分器名稱為鍵(例如 'roc_auc'),而如上的Bunch
物件為值。
- result
參考文獻
範例
>>> 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. ])