XGBoost三種特征重要性計(jì)算方法對(duì)比

特征重要性作用與來源

? 特征重要性,我們一般用來觀察不同特征的貢獻(xiàn)度。排名靠前的,我們認(rèn)為是重要的。這一思路,通常被用來做特征篩選。剔除貢獻(xiàn)度不高的尾部特征,增強(qiáng)模型的魯棒性,起到特征降維的作用。另一方面,則是用來做模型的課解釋性。我們期望的結(jié)果是:重要的特征是復(fù)合業(yè)務(wù)直覺的;符合業(yè)務(wù)直覺的特征排名靠前。在實(shí)際操作中,我們一般用樹模型的分類點(diǎn)來做文章。常用的就是XGB和其他一般樹模型。

XGB內(nèi)置的三種特征重要性計(jì)算方法1--weight

xgb.plot_importance這是我們常用的繪制特征重要性的函數(shù)方法。其背后用到的貢獻(xiàn)度計(jì)算方法為weight。

\bullet ?'weight' - the number of times a feature is used to split the data across all trees.

簡單來說,就是在子樹模型分裂時(shí),用到的特征次數(shù)。這里計(jì)算的是所有的樹。這個(gè)指標(biāo)在R包里也稱為frequency2。

XGB內(nèi)置的三種特征重要性計(jì)算方法2--gain

model.feature_importances_這是我們調(diào)用特征重要性數(shù)值時(shí),用到的默認(rèn)函數(shù)方法。其背后用到的貢獻(xiàn)度計(jì)算方法為gain。

\bullet ?'gain'-the average gain across all splits the feature is used in.

gain是信息增益的泛化概念。這里是指節(jié)點(diǎn)分裂時(shí),該特征帶來信息增益(目標(biāo)函數(shù))優(yōu)化的平均值。

XGB內(nèi)置的三種特征重要性計(jì)算方法3--cover

model = XGBRFClassifier(importance_type = 'cover')這個(gè)計(jì)算方法,需要在定義模型時(shí)定義。之后再調(diào)用

model.feature_importances_得到的便是基于cover的貢獻(xiàn)度。

'cover' - the average coverage across all splits the feature is used in.

cover形象來說,就是樹模型在分裂時(shí),特征下的葉子節(jié)點(diǎn)涵蓋的樣本數(shù)除以特征用來分裂的次數(shù)。分裂越靠近根部,cover值越大。

使用場景

weight將給予數(shù)值特征更高的值,因?yàn)樗淖償?shù)越多,樹分裂時(shí)可切割的空間越大。所以這個(gè)指標(biāo),會(huì)掩蓋掉重要的枚舉特征。

gain用到了熵增的概念,它可以方便的找出最直接的特征。即如果某個(gè)特征下的0,在label下全是0,則這個(gè)特征一定會(huì)排的靠前。

cover對(duì)于枚舉特征,會(huì)更友好。同時(shí),它沒有過度擬合目標(biāo)函數(shù)。不接受目標(biāo)函數(shù)的量綱影響。

調(diào)用他們的方式如下

# avaliable importance_types = ['weight','gain','cover','total_gain','total_cover']

f = "gain"

XGBClassifier.get_booster().get_score(importamce_type=f)

在實(shí)踐中,也會(huì)發(fā)現(xiàn),gain排出來的順序的頭尾部值差距較大,這是因?yàn)樾畔⒃鲆嬗?jì)算時(shí),后續(xù)的優(yōu)化可能都不是一個(gè)量級(jí)。類似于神經(jīng)網(wǎng)絡(luò)在優(yōu)化損失函數(shù)時(shí),后續(xù)的量綱可能是十倍、百倍的差異。所以,綜上而言,如果有下游業(yè)務(wù)方,更建議用cover的特征重要性計(jì)算方法。當(dāng)然,如果是單純的模型調(diào)優(yōu),gain能指出最重要的特征。這些特征,某些場景下還能總結(jié)成硬規(guī)則。

其他重要計(jì)算方法4 -- permutation

除了上述內(nèi)置的重要性計(jì)算方法外,還有其他其他第三方計(jì)算方式。

permutation:如果這個(gè)特征很重要,那么我們打散所有樣本中的該特征,則最后的優(yōu)化目標(biāo)將折損。這里的折損程度,就是特征的重要程度。由于其計(jì)算依賴單一特征,所以對(duì)非線形模型更友好。同時(shí),如果特征中存在多重共線性,共線性的特征重要性都將非??亢?。這是因?yàn)榛煜龁我惶卣鳎挥绊懥硪粋€(gè)特征的貢獻(xiàn)。這樣的結(jié)果是,即使特征很重要,也會(huì)排的很靠后。

針對(duì)多重共線特征,sklearn文檔中提到了一種解決方法:計(jì)算特征間的spearman rankk-order correlations,取得每一組中的頭部特征,再進(jìn)行特征重要性計(jì)算。這種方法,實(shí)際上是在解決特征共線的問題。

其他模型的特征重要性計(jì)算方法

對(duì)于同樣的樹模型,Random Forest和GBDT,同樣也有內(nèi)置的特征重要性。Random Forest使用rf.feature_importances_得到特征重要性。其中,分類任務(wù)計(jì)算的是gini不純度/信息熵?;貧w任務(wù)計(jì)算的是樹的方差。這種基于不純度(Mean Decrease in Impurity)的方法,實(shí)際上會(huì)有兩個(gè)問題存在:(1)會(huì)給予變量空間更大的特征更多的關(guān)注,而二分類特征則會(huì)靠后。(2)結(jié)果的擬合是基于訓(xùn)練集的,存在過擬合風(fēng)險(xiǎn),沒有驗(yàn)證集數(shù)據(jù)做驗(yàn)證。

? ? 針對(duì)上述的問題,建議通過out-of-bag(OOB)方法,在剩下數(shù)據(jù)上做驗(yàn)證,結(jié)合Permutation計(jì)算特征重要性。此外,GBDT也是基于不純度計(jì)算的特征重要性,不過其在單棵樹上,是回歸樹,所以不是基于gini系數(shù),而是MSE或MAE。

? ? 至于為什么他們同為樹模型,且都是基于不存度計(jì)算的重要性,但結(jié)果不同。主要有兩個(gè),一個(gè)是它們樹結(jié)構(gòu)不同;第二個(gè)則是它們的優(yōu)化對(duì)象不同。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容