首先,目前計(jì)算特征重要性計(jì)算方法主要有兩個(gè)方面:
1.計(jì)算重要性特征方法
1.1訓(xùn)練過(guò)程中計(jì)算
訓(xùn)練過(guò)程中通過(guò)記錄特征的分裂總次數(shù)、總/平均信息增益來(lái)對(duì)特征重要性進(jìn)行量化。例如實(shí)際工程中我們會(huì)用特征在整個(gè)GBDT、XGBoost里面被使用的次數(shù)或者帶來(lái)的總/平均信息增益來(lái)給特征重要度打分,最后進(jìn)行排序。由于本身Ensemble模型在選擇特征分裂時(shí)帶有一定隨機(jī)性,一般會(huì)跑多個(gè)模型然后把特征重要性求平均后排序。
1.2訓(xùn)練后使用OOB(Out of Bag)數(shù)據(jù)計(jì)算
第二種方式是訓(xùn)練好模型之后,用Out of Bag(或稱Test)數(shù)據(jù)進(jìn)行特征重要性的量化計(jì)算。具體來(lái)說(shuō),先用訓(xùn)練好的模型對(duì)OOB數(shù)據(jù)進(jìn)行打分,計(jì)算出AUC或其他業(yè)務(wù)定義的評(píng)估指標(biāo);接著對(duì)OOB數(shù)據(jù)中的每個(gè)特征:
(1)隨機(jī)shuffle當(dāng)前特征的取值;
(2)重新對(duì)當(dāng)前數(shù)據(jù)進(jìn)行打分,計(jì)算評(píng)估指標(biāo);
(3)計(jì)算指標(biāo)變化率
按照上面方式,對(duì)每個(gè)特征都會(huì)得到一個(gè)變化率,最后按照變化率排序來(lái)量化特征重要性。
延伸到 DNN 對(duì)特征重要性判定:
DNN不像Boosting這類模型那樣存在所謂的分裂次數(shù)與信息增益,就需要使用第二種方式,對(duì)每個(gè)特征進(jìn)行隨機(jī)shuffle,觀察模型指標(biāo)的變化,最后按照變化率進(jìn)行排序。比如AUC下滑率,下滑的越多說(shuō)明當(dāng)前這個(gè)指標(biāo)越重要。當(dāng)然,實(shí)際操作中需要結(jié)合業(yè)務(wù)經(jīng)驗(yàn)先指定一個(gè)候選變量池,對(duì)這部分變量計(jì)算重要度,不然計(jì)算開(kāi)銷太大。
2. 樹(shù)模型特征重要性判定
2.1 Random forest (Bagging)
[if !supportLists]l? [endif]OOB:上面已經(jīng)介紹了
[if !supportLists]l? [endif]Gini:就是看每個(gè)特征在隨機(jī)森林中的每顆樹(shù)上做了多大的貢獻(xiàn),然后取個(gè)平均值,最后比一比特征之間的貢獻(xiàn)大小。
Sklearn里面的Gini指數(shù)和信息熵,默認(rèn)是Gini指數(shù)。信息熵的計(jì)算比基尼系數(shù)緩慢一些,因?yàn)榛嵯禂?shù)的計(jì)算不涉及對(duì)數(shù)。另外,因?yàn)樾畔㈧貙?duì)不純度更加敏感,所以信息熵作為指標(biāo)時(shí),決策樹(shù)的生長(zhǎng)更加”精細(xì)”,因此對(duì)于高位數(shù)據(jù)或者噪音很多的數(shù)據(jù),信息熵很容易過(guò)擬合,基尼系數(shù)在這種情況下效果比較好。
2.2 GBDT(Boosting)
[if !supportLists]l? [endif]Gini系數(shù)
在sklearn中,GBDT和RF的特征重要性計(jì)算方法是相同的,都是基于單棵樹(shù)計(jì)算每個(gè)特征的重要性,探究每個(gè)特征在每棵樹(shù)上做了多少的貢獻(xiàn),再取個(gè)平均值。
2.3 XGBoost(Boosting)
[if !supportLists]l? [endif]Weight: 就是在子樹(shù)模型分裂時(shí),用到的特征次數(shù),這里計(jì)算的是所有的樹(shù)。
在sklearn中xgb.plot_importance()函數(shù)是繪制特征重要性的方法,默認(rèn)的是weight.
[if !supportLists]?? [endif]適用場(chǎng)景:weight將給予數(shù)值特征更高的值,因?yàn)樗淖償?shù)越多,樹(shù)分裂時(shí)可切割的空間越大。所以這個(gè)指標(biāo),會(huì)掩蓋掉重要的枚舉特征。
[if !supportLists]l? [endif]Gain:是信息增益的泛化概念。這里是指節(jié)點(diǎn)分裂時(shí),該特征帶來(lái)信息增益(目標(biāo)函數(shù))優(yōu)化的平均值。
[if !supportLists]?? [endif]適用場(chǎng)景:gain用到了熵增的概念,它可以方便的找出最直接的特征。
[if !supportLists]l? [endif]Cover:樹(shù)模型在分裂時(shí),特征下的葉子節(jié)點(diǎn)涵蓋的樣本數(shù)除以特征用來(lái)分裂的次數(shù)。分裂越靠近根部,cover值越大。
[if !supportLists]?? [endif]適用場(chǎng)景:cover對(duì)于枚舉特征,會(huì)更友好。
[if !supportLists]l? [endif]其他重要計(jì)算方法4 --
permutation
permutation:如果這個(gè)特征很重要,那么我們打散所有樣本中的該特征,則最后的優(yōu)化目標(biāo)將折損。這里的折損程度,就是特征的重要程度。由于其計(jì)算依賴單一特征,所以對(duì)非線形模型更友好。同時(shí),如果特征中存在多重共線性,共線性的特征重要性都將非??亢?。這是因?yàn)榛煜龁我惶卣?,不影響另一個(gè)特征的貢獻(xiàn)。這樣的結(jié)果是,即使特征很重要,也會(huì)排的很靠后。它在scikit-learn作為permutation_importance方法實(shí)現(xiàn)。
2.4 LightGBM(Boosting)
[if !supportLists]·?????? [endif]split: 使用該特征的次數(shù).
[if !supportLists]·?????? [endif]gain: 該特征的總增益.
3.Bagging和Boosting的區(qū)別
(1)投票方面
? ? Bagging:所有學(xué)習(xí)器平均投票。
? ? Boosting:對(duì)學(xué)習(xí)器進(jìn)行加權(quán)投票。
(2)學(xué)習(xí)順序
? ? Bagging的學(xué)習(xí)是并行的,每個(gè)學(xué)習(xí)器沒(méi)有依賴關(guān)系。
? ? Boosting學(xué)習(xí)是串行,學(xué)習(xí)有先后順序。
(3)主要作用
? ? Bagging主要用于提高泛化性能(解決過(guò)擬合,也可以說(shuō)降低方差)
? ? Boosting主要用于提高訓(xùn)練精度(解決欠擬合,也可以說(shuō)降低偏差)
(4)樣本選擇上
Bagging:訓(xùn)練集在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。
Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個(gè)樣例在分類器中的權(quán)重變化。而權(quán)值是根據(jù)上一輪的分類結(jié)果進(jìn)行調(diào)整。
(5)樣例權(quán)重
Bagging:使用均勻取樣,每個(gè)樣例的權(quán)重相等。
Boosting:根據(jù)錯(cuò)誤率不斷調(diào)整樣例的權(quán)值,錯(cuò)誤率越大則權(quán)重越大。
4. 隨機(jī)森林和極端隨機(jī)樹(shù)的區(qū)別
隨機(jī)森林的隨機(jī)極端隨機(jī)樹(shù)的隨機(jī)
樣本隨機(jī)
特征隨機(jī)
參數(shù)隨機(jī)
模型隨機(jī)(ID3,C4.5)
特征隨機(jī)
參數(shù)隨機(jī)
模型隨機(jī)(ID3,C4.5)
分裂隨機(jī)
極端隨機(jī)樹(shù)是隨機(jī)森林的一個(gè)變種, 原理幾乎和RF一模一樣,僅有區(qū)別有:
(1)對(duì)于每個(gè)決策樹(shù)的訓(xùn)練集,RF采用的是隨機(jī)采樣bootstrap來(lái)選擇采樣集作為每個(gè)決策樹(shù)的訓(xùn)練集,而extra trees一般不采用隨機(jī)采樣,即每個(gè)決策樹(shù)采用原始訓(xùn)練集。
(2)在選定了劃分特征后,RF的決策樹(shù)會(huì)基于基尼系數(shù),均方差之類的原則,選擇一個(gè)最優(yōu)的特征值劃分點(diǎn),這和傳統(tǒng)的決策樹(shù)相同。但是extra trees比較的激進(jìn),他會(huì)隨機(jī)的選擇一個(gè)特征值來(lái)劃分決策樹(shù)。