決策樹算法


1. 決策樹算法

1.1 背景知識

  • 信息量\(I(X)\):指一個樣本/事件所蘊含的信息,如果一個事情的概率越大,那么就認為該事件所蘊含的信息越少,確定事件不攜帶任何信息量
    • \(I(X)=-log(p(x))\)
  • 信息熵\(H(X)\):用來描述系統信息量的不確定度(均值),熵只依賴於隨機變量X的分布,與取值無關
    • \(H(X) = -\sum^m_{i=1}p_ilog_2p_i\)
    • 高信息熵:表示隨機變量取值等概率出現,是均勻分布的
  • 條件熵\(H(Y|X)\):變量X的發生下(變量X的每個值都會取),Y的發生帶來的熵(不確定度)。
    • \(H(Y|X)=\sum_xp(x)H(Y|X=x)\)
    • \(=-\sum_xp(x)\sum_yp(y|x)log p(y|x)\)
    • \(=-\sum_x\sum_y p(x,y)plog p(y|x)\)
    • \(=-\sum_{x,y}p(x,y)logp(y|x)\)
  • 聯合熵\(H(X,Y)\):度量一個聯合分布的隨機系統的不確定度,即觀察一個多個隨機變量的隨機系統獲得的信息量
    • \(H(X,Y)=-\sum_x\sum_yp(x,y)logp(x,y)\)
    • \(=-\sum_x\sum_yp(x,y)logp(x)p(y|x)\)
    • \(=-\sum_x\sum_yp(x,y)logp(x)-\sum_x\sum_yp(x,y)logp(y|x)\)
    • \(=H(x)+H(Y|X)\)
    • 對一個兩個隨機變量的隨機系統,可以先觀察一個隨機變量獲取信息量,觀察完后,在擁有這個信息量的基礎上觀察第二個隨機變量的信息量
      • 如果有n個隨機變量處於一個隨機系統中,獲取其聯合熵也是無關觀察先后

互信息:一個隨機變量中包含的關於另一個隨機變量的信息量,或者說是一個隨機變量由於已知另一個隨機變量而減少的不肯定性

  • \(I(X;Y)=H(X)-H(X|Y)\)
  • \(=H(Y)-H(Y|X)\)
  • \(=H(X,Y)-H(X|Y)-H(Y|X)\)

相對熵(KL散度):如果我們對於同一個隨機變量x有兩個單獨的概率分布P(x)()和 Q(x),我們可以使用KL散度來衡量這兩個分布的差異

  • \(D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)})\)
    • n為事件的所有可能性
    • \(D_{KL}\)的值越小,表示q分布和p分布越接近
    • \(p(x_i)\)為真實事件概率分布
    • \(q(x_i)\)為理論擬合出來的該事件的概率分布

交叉熵(\(H(p,q)\)):用來衡量在給定的真實分布下,使用非真實分布所指定的策略消除系統的不確定性所需要付出成本的大小

  • 越優的策略, 最終的交叉熵越低
  • 由相對熵推導:
    • \(D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)})\)
    • \(=\sum_{i=1}^np(x_i)logp(x_i)-\sum_{i=1}^np(x_i)logq(x_i)\)
    • \(=-H(p(x))+[-\sum_{i=1}^np(x_i)logq(x_i)]\)
    • 因前一部分不變,故在優化中中關注交叉熵即可
    • 交叉熵:\(H(p,q)=-\sum_{i=1}^np(x_i)logq(x_i)\)

1.2 決策樹

  • 基本思想:是以信息熵為度量構造一顆熵值下降最快的樹,到葉子節點處,熵值為0;
  • 分類:分類樹和回歸樹,前者用於分類標簽值,后者用於預測連續值,常用的算法有ID3、C4.5、CART等
  • 過程:給定的訓練數據集中,依據特征選擇的准則,遞歸的選擇最優划分特征,並根據此特征將訓練數據進行分割,使得各子數據集有一個最好的分類的
  • 三要素:
    • 特征選擇
    • 決策樹生成
    • 決策樹剪枝

1.2.1 特征選擇

本質:使用某特征對數據集划分之后,各數據子集的純度要比划分前的數據集D的純度高(不確定性要比划分前數據集D的不確定性低)

  • 划分后的純度為各數據子集的純度的加和(子集占比*子集的經驗熵)
  • 度量划分前后的純度變化 用子集的純度之和與划分前的數據集D的純度 進行對比

信息增益(ID3):根據某特征划分使的數據集前后的熵的差值最大

  • \(gain(D,a)=H(D)-\sum_{v=1}^V\frac{|D^v|}{D}H(D^v)\)
    • a的可能取值:\(a^1,a^2,\cdots,a^v\)
    • \(D^v\)在第v個節點,包含D中在屬性a上所有取值\(a^v\)的樣本
  • 優點:
    • 決策樹構建速度快,實現簡單
  • 缺點:
    • 計算依賴於特征數目較多的特征,而屬性值最多的屬性不一定最優
    • ID3算法不是遞增算法
    • ID3算法是單變量決策樹,對於特征屬性之間的關系不會考慮
    • 抗躁性差
    • 只適合小規模數據集,需要將數據放到內存中

信息增益比(C4.5):是在信息增益的基礎之上乘上一個懲罰參數。特征個數較多時,懲罰參數較小;特征個數較少時,懲罰參數較大

  • \(gain_ratio(D,a)=\frac{gain(D,a)}{IV(a)}\)
    • \(IV(a)=-\sum^V_{v=1}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}\)
  • 優點:
    • 產生的規則易於理解
    • 准確率較高
    • 實現簡單
  • 缺點:
    • 對數據集需要進行多次順序掃描和排序,所以效率較低
    • 只適合小規模數據集,需要將數據集放到內存中

基尼指數(CART算法--分類樹):表示在樣本集合中一個隨機選中的樣本被分錯的概率,越小表示被分錯的概率小,集合純度高

  • \(gini(D)=1-\sum^{|y|}_{k=1}p^2_k\)
    • \(p_k\):表示選中的樣本屬於k類別的概率
  • \(gini(D,a)=\sum^{V}_{v=1}\frac{|D^v|}{|D|}gini(D^v)\)
    • 在集合A中,選取使基尼系數最小的屬性為最優划分屬性
  • CART構建是二叉樹,可以用於分類,可以用來回歸

1.2.1.1 ID3、C4.5、CART分類樹算法總結

  • ID3、C4.5算法均使用在小規模數據集上使用
  • ID3、C4.5都是單變量決策樹
  • 當屬性值取值比較多的時候,最好考慮C4.5算法,ID3得出的效果會比較差
  • 決策樹分類一般情況只適用小數據量的情況(數據放到內存)
  • CART算法是三者中最常用的一種決策樹構建算法
  • 三種算法的區別僅僅只是對於當前樹的評價標准不同,ID3信息增益,C4.5信息增益率,CART基尼系數
  • CART構建的一定是二叉樹,ID3和C4.5構建的不一定是二叉樹

1.2.2 決策樹的停止條件

  • 當前節點包含的樣本屬於同一類別
  • 當前屬性集為空,或者所有的樣本在所有屬性上的取值相同
  • 當前節點樣本集合為空
  • 當前節點中記錄數小於某個閥值,同時迭代次數達到給定值時,停止構建過程

1.2.3 決策樹算法效果評估

  • 決策樹的效果評估與一般的分類算法一樣,采用混淆矩陣來計算准確率、召回率、精確率等指標
  • 也可以采用葉子節點的純度總和來評估算法的效果,值越小,效果越好
  • 決策樹的損失函數(值越小,效果越好)
    • \(loss = \sum^{leaf}_{t=1} \frac{|D_t|}{|D|}H(t)\)

1.2.4 決策樹的剪枝

  • 前置剪枝:在構建決策樹的過程中,提前停止,結果決策樹一般比較小,時間證明這個策略無法得到比較好的結果
  • 后置剪枝:在決策樹構建好后,然后再開始剪枝,一般使用兩種方法:1)用單一葉子節點代替整個子樹,葉節點的分類采用子樹中最主要的分類;2)將一個子樹完全替代另外一顆子樹;
  • 后置剪枝的主要問題是計算效率問題,存在一定的浪費情況
  • 后剪枝總體思路(交叉驗證):1)由完全樹\(T_0\)開始,剪枝部分節點得到\(T_1\),在此剪枝得到\(T_2 \dots\)直到僅剩樹根的樹\(T_k\);2)在驗證數據集上對這k+1個樹進行評價,選擇最優樹\(T_a\)(損失函數最小的樹)

1.2.4.1 決策樹的剪枝過程

  1. 對於給定的決策樹\(T_0\),計算所有內部非也子節點的剪枝系數
  2. 查找最小剪枝系數的節點,將其子節點進行刪除操作,進行剪枝得到決策樹\(T_k\);如果存在多個最小剪枝系數節點,選擇包含數據項最多的節點進行剪枝操作
  3. 重復上述操作,直到產生的剪枝決策樹\(T_k\)只有1個節點
  4. 得到決策樹\(T_1,T_2,\dots,T_k\)
  5. 使用驗證樣本集選擇最優子樹\(T_a\)

1.2.4.2 決策樹剪枝損失函數即剪枝系數

  • 原始損失函數
    • \(loss = \sum^{leaf}_{t=1} \frac{|D_t|}{|D|}H(t)\)
  • 葉節點越多,決策樹越復雜,損失越大;修正添加剪枝系數,修改后的損失函數為:
    • \(loss_{\alpha}= loss + \alpha* leaf\)
  • 考慮根節點為r的子樹,剪枝前后的損失函數分別為loss(R)和loss(r),當這兩者相等的時候,可以求得剪枝系數
    • \(loss_{\alpha}(r)= loss(r) + \alpha\)
    • \(loss_{\alpha}(R)= loss(R) + \alpha*R_{leaf}\)
    • 剪枝系數:\(\alpha = \frac{loss(r)-loss(R)}{R_{leaf}-1}\)

1.2.5 分類樹和回歸樹的區別

  • 分類樹采用信息增益、信息增益率、基尼系數來評價樹的效果,都是基於概率值進行判斷的;而二叉樹的葉子節點的預測值一般為葉子節點中概率最大的類別作為當前葉子的預測值
  • 在回歸樹中,葉子節點的預測值一般為葉子節點中所有值的均值來作為當前葉子節點的預測值。所以在回歸樹中一般采用MSE作為樹的評價指標,即方差。
    • \(MES = \frac{1}{n} \sum^n_{i=1}(y_i - \overbrace{y_i})^2\)
  • 一般情況下,只會使用CART算法構建回歸樹

1.3 Python實現

待補


免責聲明!

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



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