首先罢维,目前計算特征重要性計算方法主要有兩個方面:
1.計算重要性特征方法
1.1訓練過程中計算
訓練過程中通過記錄特征的分裂總次數(shù)函荣、總/平均信息增益來對特征重要性進行量化唾戚。例如實際工程中我們會用特征在整個GBDT没龙、XGBoost里面被使用的次數(shù)或者帶來的總/平均信息增益來給特征重要度打分铺厨,最后進行排序缎玫。由于本身Ensemble模型在選擇特征分裂時帶有一定隨機性,一般會跑多個模型然后把特征重要性求平均后排序解滓。
1.2訓練后使用OOB(Out of Bag)數(shù)據(jù)計算
第二種方式是訓練好模型之后赃磨,用Out of Bag(或稱Test)數(shù)據(jù)進行特征重要性的量化計算。具體來說洼裤,先用訓練好的模型對OOB數(shù)據(jù)進行打分邻辉,計算出AUC或其他業(yè)務定義的評估指標;接著對OOB數(shù)據(jù)中的每個特征:
(1)隨機shuffle當前特征的取值腮鞍;
(2)重新對當前數(shù)據(jù)進行打分值骇,計算評估指標;
(3)計算指標變化率
按照上面方式移国,對每個特征都會得到一個變化率吱瘩,最后按照變化率排序來量化特征重要性。
延伸到 DNN 對特征重要性判定:
DNN不像Boosting這類模型那樣存在所謂的分裂次數(shù)與信息增益迹缀,就需要使用第二種方式使碾,對每個特征進行隨機shuffle,觀察模型指標的變化祝懂,最后按照變化率進行排序票摇。比如AUC下滑率,下滑的越多說明當前這個指標越重要砚蓬。當然矢门,實際操作中需要結合業(yè)務經(jīng)驗先指定一個候選變量池,對這部分變量計算重要度灰蛙,不然計算開銷太大祟剔。
2. 樹模型特征重要性判定
2.1 Random forest (Bagging)
[if !supportLists]l? [endif]OOB:上面已經(jīng)介紹了
[if !supportLists]l? [endif]Gini:就是看每個特征在隨機森林中的每顆樹上做了多大的貢獻,然后取個平均值摩梧,最后比一比特征之間的貢獻大小峡扩。
Sklearn里面的Gini指數(shù)和信息熵,默認是Gini指數(shù)障本。信息熵的計算比基尼系數(shù)緩慢一些,因為基尼系數(shù)的計算不涉及對數(shù)响鹃。另外驾霜,因為信息熵對不純度更加敏感,所以信息熵作為指標時买置,決策樹的生長更加”精細”粪糙,因此對于高位數(shù)據(jù)或者噪音很多的數(shù)據(jù),信息熵很容易過擬合忿项,基尼系數(shù)在這種情況下效果比較好蓉冈。
2.2 GBDT(Boosting)
[if !supportLists]l? [endif]Gini系數(shù)
在sklearn中城舞,GBDT和RF的特征重要性計算方法是相同的,都是基于單棵樹計算每個特征的重要性寞酿,探究每個特征在每棵樹上做了多少的貢獻家夺,再取個平均值。
2.3 XGBoost(Boosting)
[if !supportLists]l? [endif]Weight: 就是在子樹模型分裂時伐弹,用到的特征次數(shù)拉馋,這里計算的是所有的樹。
在sklearn中xgb.plot_importance()函數(shù)是繪制特征重要性的方法惨好,默認的是weight.
[if !supportLists]?? [endif]適用場景:weight將給予數(shù)值特征更高的值煌茴,因為它的變數(shù)越多,樹分裂時可切割的空間越大日川。所以這個指標蔓腐,會掩蓋掉重要的枚舉特征。
[if !supportLists]l? [endif]Gain:是信息增益的泛化概念龄句。這里是指節(jié)點分裂時回论,該特征帶來信息增益(目標函數(shù))優(yōu)化的平均值。
[if !supportLists]?? [endif]適用場景:gain用到了熵增的概念撒璧,它可以方便的找出最直接的特征透葛。
[if !supportLists]l? [endif]Cover:樹模型在分裂時,特征下的葉子節(jié)點涵蓋的樣本數(shù)除以特征用來分裂的次數(shù)卿樱。分裂越靠近根部僚害,cover值越大。
[if !supportLists]?? [endif]適用場景:cover對于枚舉特征繁调,會更友好萨蚕。
[if !supportLists]l? [endif]其他重要計算方法4 --
permutation
permutation:如果這個特征很重要,那么我們打散所有樣本中的該特征蹄胰,則最后的優(yōu)化目標將折損岳遥。這里的折損程度,就是特征的重要程度裕寨。由于其計算依賴單一特征浩蓉,所以對非線形模型更友好。同時宾袜,如果特征中存在多重共線性捻艳,共線性的特征重要性都將非常靠后庆猫。這是因為混淆單一特征认轨,不影響另一個特征的貢獻。這樣的結果是月培,即使特征很重要嘁字,也會排的很靠后恩急。它在scikit-learn作為permutation_importance方法實現(xiàn)。
2.4 LightGBM(Boosting)
[if !supportLists]·?????? [endif]split: 使用該特征的次數(shù).
[if !supportLists]·?????? [endif]gain: 該特征的總增益.
3.Bagging和Boosting的區(qū)別
(1)投票方面
? ? Bagging:所有學習器平均投票纪蜒。
? ? Boosting:對學習器進行加權投票衷恭。
(2)學習順序
? ? Bagging的學習是并行的,每個學習器沒有依賴關系霍掺。
? ? Boosting學習是串行匾荆,學習有先后順序。
(3)主要作用
? ? Bagging主要用于提高泛化性能(解決過擬合杆烁,也可以說降低方差)
? ? Boosting主要用于提高訓練精度(解決欠擬合牙丽,也可以說降低偏差)
(4)樣本選擇上
Bagging:訓練集在原始集中有放回選取的,從原始集中選出的各輪訓練集之間是獨立的兔魂。
Boosting:每一輪的訓練集不變烤芦,只是訓練集中每個樣例在分類器中的權重變化。而權值是根據(jù)上一輪的分類結果進行調整析校。
(5)樣例權重
Bagging:使用均勻取樣构罗,每個樣例的權重相等。
Boosting:根據(jù)錯誤率不斷調整樣例的權值智玻,錯誤率越大則權重越大遂唧。
4. 隨機森林和極端隨機樹的區(qū)別
隨機森林的隨機極端隨機樹的隨機
樣本隨機
特征隨機
參數(shù)隨機
模型隨機(ID3,C4.5)
特征隨機
參數(shù)隨機
模型隨機(ID3,C4.5)
分裂隨機
極端隨機樹是隨機森林的一個變種, 原理幾乎和RF一模一樣,僅有區(qū)別有:
(1)對于每個決策樹的訓練集吊奢,RF采用的是隨機采樣bootstrap來選擇采樣集作為每個決策樹的訓練集盖彭,而extra trees一般不采用隨機采樣,即每個決策樹采用原始訓練集页滚。
(2)在選定了劃分特征后召边,RF的決策樹會基于基尼系數(shù),均方差之類的原則裹驰,選擇一個最優(yōu)的特征值劃分點隧熙,這和傳統(tǒng)的決策樹相同。但是extra trees比較的激進幻林,他會隨機的選擇一個特征值來劃分決策樹贞盯。