常見樹模型節點分裂方式總結


信息增益是樹模型,比如ID3算法用來尋早最優特征分割點的計算標准了解信息增益之前, 需要了解熵

信息增益與熵(entropy)有關,在概率論中,熵是隨機變量不確定性的度量,熵越大,隨機變量的不確定性就越大;假設\(X\)是取有限個值的離散隨機變量,其概率分布為:

\[P(X=x_i)=p_i,i=1,2,3,...,n \]

則,熵的定義為:

\[H(X)=-\sum_{i=1}^{n}p_i*\log{p_i} \]

一般取自然對數\(e\)為底數
值得注意的是,熵實際上是隨機變量\(X\)的分布的泛函數,它並不依賴\(X\)的實際取值,而僅僅依賴\(X\)的概率分布,所以它又可以被記作:

\[H(p)=-\sum_{i=1}^{n}p_i*\log{p_i} \]

其中, \(n\)表示\(X\)\(n\)種不同的取值, 這個值一般是離散的. \(p_i\)表示為\(X\)取到值為\(i\)的概率.\(log\)一般是自然底數
考慮如下數據集\(D\):

image.png
那么整個數據集的熵就是正類和負類的熵之和

\[Entropy(D) =-(\frac{4}{9} * \log \frac{4}{9} + \frac{5}{9} * \log\frac{5}{9})=0.6869 \]

信息增益

信息增益可以理解為分類前的信息熵減去分類后的信息熵

條件熵

多個變量的熵叫聯合熵, 比如兩個變量\(X,Y\)的聯合熵就表示為:

\[H(X,Y)=-\sum_{i=1}^{n}p_{(x_i,y_i)}\log p_{(x_i,y_i)} \]

類似於條件概率,熵同樣也存在着條件熵, 條件熵描述了知道某個變量以后, 剩下的變量的不確定性, 其表達式如下:

\[H(X|Y)=-\sum_{i=1}^{n}p_{(x_i,y_i)}\log p(x_i|y_i) \]

\(H(X)\)度量了\(X\)的不確定性, \(H(X|Y)\)度量了知道\(Y\)后,\(X\)的不確定性, 那么\(H(X)-H(X|Y)\)度量的可以理解為:知道\(Y\)的基礎上, \(X\)不確定性減少的程度,我們記為\(I(X,Y)\),信息增益如圖如圖:

假定當前樣本集合\(D\)中,第\(k\)類樣本所占比例為\(p_k(k=1,2,3...,|y|)\), 則\(D\)的信息熵定義為:

\[Ent(D)=-\sum_{k=1}^{|y|}p_k \log p_k \]

假定離散屬性\(a\)\(V\)個可能的取值\({a^1,a^2...a^v}\), 若使用\(a\)來對樣本集進行划分,則會產生\(V\)個分支結點, 也就是說, ID3構建的決策樹, 是多叉樹, 那么它的信息增益就是

\[Gain(D,a) = Ent(D)-\sum_{v=1}^{V} \frac{|D^v|}{|D|}Ent(D^v) \]

我們計算特征\(a_3\)的信息增益, 因為\(a_3\)是連續變量. 我們在處理的時候, 一般將連續的變量離散化, 或者可以通過二分法將數據分為2個集合, 那么我們有划分點的集合:

\[T_a = {\frac{a^i+a^{i+1}}{2}}, i\in{1,2...,n-1} \]

通常,使用二分法的時候, 需要對特征進行排序, 這樣是為了簡化計算,避免重復的計算
經過排序后, 數據變為:

1 3 4 4 5 6 7 7 8
+ - + + - - - + -

假設我們以排序后的第一個樣本和第二個樣本進行分割, 那么我們可以得到分割點為(1+3)/2=2
大於2的樣本只有8個, 小於2的樣本有1個,考慮上正負類的結果:

\[Ent(D, a_3<2)=-(\frac{1}{1} * \log \frac{1}{1} +\frac{0}{1} * \log \frac{0}{1} ) \\ Ent(D, a_3>2)=-(\frac{3}{8} * \log \frac{3}{8} +\frac{5}{8} * \log \frac{5}{8} )\\ Ent(D,a_3,2) = \frac {1}{9}*Ent(D,a_3<2)+\frac{8}{9}*Ent(D,a_3>2) \]

按照這個步驟, 我們能計算出\(a_3\)特征的每個分裂點的熵, 我們選擇熵最小的作為分裂結點, 因為這樣能導致信息增益最大
假設我們的分裂結點剛好是2, 那么\(a_3\)特征的信息增益為:

\[Gain(D,a)=Ent(D)-Ent(D,a_3,2) \]

Gini系數

假設有\(K\)個類,第\(k\)個類的概率為\(p_k\), 則基尼系數的表達式為:

\[Gini(p)=\sum ^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 \]

對於二分類問題, 則公式可以簡化為: \(Gnini(p)=2p(1-p)\), p代表屬於第一類樣本的概率
對於給定的樣本集合\(D\), \(K\)個類, 第\(k\)個類別的數量為\(C_k\), 則樣本\(D\)的基尼系數為:

\[Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 \]

顯然, 對於集合\(D\),假設屬性\(A\)的某個值\(a\)將數據集D切分為\(D_1,D_2\),則在特征A的條件下, D的基尼系數表達式為:

\[Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) \]

相比於復雜的對數運算, 基尼系數的運算簡單很多, 對於連續值得處理, 也是像上面一樣連續二分連續特征
比如, 我們計算\(a_1\)的Gini系數:

\[Gini(D,a_1=T)=1-[(\frac{3}{4})^2+(\frac{1}{4})^2] \\ Gini(D,a_1=F)=1-[(\frac{1}{5})^2+(\frac{4}{5})^2] \\ Gini(D,a)=\frac{4}{9}*Gini(D,a_1=T)+\frac{5}{9}*Gini(D,a_1=F) \]

最后, 我們選擇Gini系數最大的就可以了

總結

信息增益: 以某特征划分數據集前后的熵的差值

在熵的理解那部分提到了,熵可以表示樣本集合的不確定性,熵越大,樣本的不確定性就越大。因此可以使用划分前后集合熵的差值來衡量使用當前特征對於樣本集合D划分效果的好壞。
信息增益的理解:對於待划分的數據集D,其 entroy(前)是一定的,但是划分之后的熵 entroy(后)是不定的,entroy(后)越小說明使用此特征划分得到的子集的不確定性越小(也就是純度越高),因此 entroy(前) - entroy(后)差異越大,說明使用當前特征划分數據集D的話,其純度上升的更快。而我們在構建最優的決策樹的時候總希望能更快速到達純度更高的集合,這一點可以參考優化算法中的梯度下降算法,每一步沿着負梯度方法最小化損失函數的原因就是負梯度方向是函數值減小最快的方向。同理:在決策樹構建的過程中我們總是希望集合往最快到達純度更高的子集合方向發展,因此我們總是選擇使得信息增益最大的特征來划分當前數據集D。
缺點: 信息增益偏向取值較多的特征
原因: 當特征的取值較多時,根據此特征划分更容易得到純度更高的子集,因此划分之后的熵更低,由於划分前的熵是一定的,因此信息增益更大,因此信息增益比較 偏向取值較多的特征。

Gini系數

尼指數(基尼不純度):表示在樣本集合中一個隨機選中的樣本被分錯的概率。

樹模型與高維稀疏特征

通常情況下,如果遇到高維稀釋特征的話,樹模型很容易過擬合,而且常常表現得不如帶正則的線性模型。主要的原因有:

  1. 高維sparse特征下,葉子節點分裂會存在bias

假設有1w 個樣本, y類別0和1,100維特征,其中10個樣本都是類別1,而特征 f1的值為0,1,且剛好這10個樣本的 f1特征值都為1,其余9990樣本都為0.這種情況在樹模型的時候,很容易優化出含一個使用 f1為分裂節點的樹直接將數據划分的很好,但是當測試的時候,卻會發現效果很差,因為這個特征只是剛好偶然間跟 y擬合到了這個規律,這就比較容易導致過擬合。而對於帶有正則項的線性模型來說,正則項是對權重的懲罰,也就是 W1一旦過大,懲罰就會很大,進一步壓縮 W1的值,使他不至於過大,而樹模型則不一樣,樹模型的懲罰項通常為葉子節點數和深度等以及像xgb中的對葉子結點權重的懲罰,而我們都知道,對於上面這種 case,樹只需要一個節點就可以完美分割9990和10個樣本,懲罰項極其之小.這也就是為什么在高維稀疏特征的時候,線性模型會比非線性模型好的原因了:帶正則化的線性模型比較不容易對稀疏特征過擬合。此段參考自

  1. 高維稀釋經常出現在one-hot的時候
    特征onehot之后,一個特征變成了很多特征,那么它被選中的概率就變大,無形中就增加了這個特征的重要性,等同於降低了其他特征的重要性,這樣就不符合實際情況。所以說在這種情況下,onehot編碼產生的稀疏特征不適合樹算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM