scikit-learn 基于排列的特征重要性

2023-02-20 14:30 更新

基于排列的特征重要性是一種模型檢查技術(shù),可用于表格型數(shù)據(jù)中任一個(gè)擬合的估計(jì)器 。 這對于非線性或不可解釋的估計(jì)器特別有用 ?;谂帕械奶卣髦匾远x為單個(gè)特征取值被隨機(jī)打亂時(shí)模型得分的降低程度。此過程破壞了特征與目標(biāo)之間的關(guān)系,因此模型得分的下降程度表示了模型對特征的依賴程度。這種技術(shù)的好處在于它不依賴于模型,并且可以通過特征的不同排列進(jìn)行多次計(jì)算。

permutation_importance函數(shù)可以計(jì)算給定數(shù)據(jù)集的估計(jì)器的特征重要性。n_repeats參數(shù)設(shè)置特征取值隨機(jī)重排的次數(shù),并返回樣本的特征重要性。

讓我們考慮下面訓(xùn)練回歸模型的例子:

>>> from sklearn.datasets import load_diabetes
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.linear_model import Ridge
>>> diabetes = load_diabetes()
>>> X_train, X_val, y_train, y_val = train_test_split(
...     diabetes.data, diabetes.target, random_state=0)
...
>>> model = Ridge(alpha=1e-2).fit(X_train, y_train)
>>> model.score(X_val, y_val)
0.356...

通過得分驗(yàn)證其性能,明顯大于隨機(jī)水平。這樣就可以使用 permutation_importance函數(shù)來探查哪些特征對預(yù)測準(zhǔn)確度貢獻(xiàn)最大:

>>> from sklearn.inspection import permutation_importance
>>> r = permutation_importance(model, X_val, y_val,
...                            n_repeats=30,
...                            random_state=0)
...
>>> for i in r.importances_mean.argsort()[::-1]:
...     if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
...         print(f"{diabetes.feature_names[i]:<8}"
...               f"{r.importances_mean[i]:.3f}"
...               f" +/- {r.importances_std[i]:.3f}")
...
s5      0.204 +/- 0.050
bmi     0.176 +/- 0.048
bp      0.088 +/- 0.033
sex     0.056 +/- 0.023

值得注意的是,s5特征的重要性值占參考分?jǐn)?shù)0.356的很大一部分。

排列特征重要性可以在訓(xùn)練集上或在保留的測試或驗(yàn)證集上進(jìn)行計(jì)算。使用保留集可以突出顯示哪些特征對模型的泛化能力貢獻(xiàn)最大;對訓(xùn)練集重要但對保留數(shù)據(jù)集不重要的功能可能會(huì)導(dǎo)致模型過擬合。

警告
對不良模型(較低的交叉驗(yàn)證分?jǐn)?shù))不重要的特征,可能對于良好模型非常重要,因此,在計(jì)算重要性之前,使用保留數(shù)據(jù)集評估模型(或更好地使用交叉驗(yàn)證)的預(yù)測能力始終很重要。特征排列重要性本身并不能反映特征的內(nèi)在預(yù)測價(jià)值,但是能體現(xiàn)這個(gè)特征對于特定模型的重要性。

4.2.1 排列重要性算法概述

  • 輸入:擬合的預(yù)測模型 ,表格型數(shù)據(jù)集(訓(xùn)練或驗(yàn)證)

  • 計(jì)算模型關(guān)于數(shù)據(jù) (例如,分類器的準(zhǔn)確性或回歸器的)的參考分?jǐn)?shù)

  • 對于中的特征

    • 對于中的每個(gè)

      • 隨機(jī)打亂數(shù)據(jù)集 D 的第列取值,打亂后的數(shù)據(jù)集命為 。
      • 計(jì)算模型的對數(shù)據(jù)集的分?jǐn)?shù) 。
    • 計(jì)算特征 的重要性 ,計(jì)算公式為:

4.2.2 樹模型中基于不純度的特征重要性

基于樹的模型提供了另一種基于不純度平均減少量 (MDI)的特征重要性度量方法。通過決策樹的分裂準(zhǔn)則(基尼系數(shù),信息熵或均方誤差)來量化不純度。然而,這種方法會(huì)過度重視模型而引起過擬合, 可能無法預(yù)測新數(shù)據(jù)的特征 。另一方面,基于排列特性重要性的方法避免了這個(gè)問題,因?yàn)樗梢詫π碌臄?shù)據(jù)進(jìn)行計(jì)算。

基于不純度的樹模型對特征的重要性的判斷很容易產(chǎn)生偏見,并且偏向于高基數(shù)特征(通常是數(shù)值特征),而不是低基數(shù)特征(例如具有少量可能類別的二元特征或分類變量)。

基于排列的特征重要性不表現(xiàn)出這種偏差。它可以在模型預(yù)測的基礎(chǔ)上計(jì)算出性能指標(biāo),并且可以用于分析任何模型(不僅僅是基于樹的模型)。

以下示例突出了與基于排列的特征重要性相比,基于不純度的特征重要性的局限性: 置換重要性與隨機(jī)森林特征重要性(MDI)。

4.2.3 在高度相關(guān)的特征上的誤導(dǎo)值

當(dāng)兩個(gè)特征相關(guān)聯(lián)并且其中一個(gè)特征被隨機(jī)重排時(shí),模型仍然可以通過其相關(guān)特征來訪問此特征。這將導(dǎo)致兩個(gè)特征的重要性指標(biāo)降低,而這兩個(gè)特征實(shí)際上可能很重要。

處理此問題的一種方法是將關(guān)聯(lián)的特征聚類,并且對于每個(gè)聚類僅保留一個(gè)特征。在以下示例中探討了該方法: 具有多重共線性或相關(guān)特征的置換重要性。

例子:
排列重要性與隨機(jī)森林特征重要性(MDI)
具有多重共線性或相關(guān)特征的排列重要性
參考文獻(xiàn):
[1]L. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001. https://doi.org/10.1023/A:1010933404324


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號