決策樹

零、信息熵

熵 (entropy) 這一詞最初來源於熱力學。1948年,克勞德·愛爾伍德·香農將熱力學中的熵引入信息論,所以也被稱爲香農熵 (Shannon entropy),信息熵 (information entropy)。

首先給出信息熵的公式:H(X)=i=1np(Xi)log2p(Xi)H(X)=- \sum _ {i=1} ^n p(X_i) \log_2 p(X_i)
其中:p(Xi)p(X_i) 代表隨機事件XiX_i發生的概率。
下面逐步介紹信息熵公式來源:

首先了解一下信息量:信息量是對信息的度量,就跟時間的度量是秒一樣,當我們考慮一個離散的隨機變量 x 的時候,當我們觀察到的這個變量的一個具體值的時候,我們接收到了多少信息呢?信息的多少用信息量來衡量。

一條信息的信息量大小和它的不確定性有直接的關係。越小概率的事情發生了產生的信息量越大,如中國男足奧運會奪冠;越大概率的事情發生了產生的信息量越小,如太陽從東邊升起來了(肯定發生嘛, 沒什麼信息量)。這很好理解!

因此一個具體事件的信息量應該是隨着其發生概率而遞減的,且不能爲負。因此我們想要尋找一個函數 h(X),它是概率 p(X) 的單調函數,但是這個表示信息量的函數的形式怎麼找呢?隨着概率增大而減少的函數形式太多了!不要着急,我們還有下面這條性質。

如果我們有兩個不相關的事件X和Y,那麼我們觀察到的兩個事件同時發生時獲得的信息應該等於觀察到的事件各自發生時獲得的信息之和,即: h(X,Y) = h(X) + h(Y)

由於X,Y 是兩個獨立的事件,滿足 p(X,Y) = p(X)*p(Y),可以轉化爲log2p(X,Y)=log2p(X)+log2p(Y)\log_2p(X,Y) = \log_2p(X) + \log_2p(Y)

根據上面推導,我們很容易看出 h(X)一定與 p(X)的對數有關。因此我們得到信息量公式:
h(X)=log2p(X)h(X) = −log_2p(X)

  1. 爲什麼有一個負號?其中,負號是爲了確保信息一定是正數或者是 0 (0≤p(X)≤1)
  2. 爲什麼底數爲2?這是因爲,我們只需要信息量滿足低概率事件 x 對應於高的信息量。那麼對數的選擇是任意的。我們只是遵循信息論的普遍傳統,使用 2 作爲對數的底。

下面正式引出信息熵:信息量度量的是一個具體事件發生了所帶來的信息,而熵則是在結果出來之前對可能產生的信息量的期望——考慮該隨機變量的所有可能取值,即所有可能發生事件所帶來的信息量的期望。即
H(X)=i=1np(Xi)log2p(Xi)H(X)=- \sum _ {i=1} ^n p(X_i) \log_2 p(X_i)

H(X) 就被稱爲隨機變量X的熵,它是對隨機變量不確定性的度量,是對所有可能發生的事件產生的信息量的期望。

從公式可得,隨機變量的取值個數越多,狀態數也就越多,信息熵就越大,混亂程度就越大。當隨機分佈爲均勻分佈時,熵最大,且 0H(X)log2n0 ≤ H(X) ≤ log_2n
參考:一看就懂的信息熵

一、決策樹模型

  • 決策樹是一種基本的分類和迴歸方法,我們接下來主要討論用於分類的決策樹
  • 決策樹學習時,利用訓練數據,根據損失函數最小化的原則建立決策樹模型;預測時,對新的數據,利用決策樹模型進行分類
  • 決策樹學習主要包含三個步驟:特徵選擇、決策樹生成、決策樹修剪
    在這裏插入圖片描述

二、決策樹學習算法

1.概述:

  • 決策樹是一種樹型結構,其中每個內部結點表示在一個屬性上的測試,每個分支代表一個測試輸出,每個葉結點代表一種類別。
  • 決策樹學習是以實例爲基礎的歸納學習。
  • 決策樹學習採用的是自頂向下的遞歸方法,其基本思想是以信息熵爲度量構造一棵熵值下降最快的樹(也就是說節點中的數據純度越來越高,類別越來越少),到葉子節點處的熵值爲零此時每個葉節點中的實例都屬於同一類

決策樹算法主要包含兩個階段,首先是訓練階段,從給定的訓練數據集,構建出一棵決策樹;接下來是分類階段,從根開始,按照決策樹的分類屬性逐層往下劃分,直到葉節點,獲得分類結果。

對於算法的描述,接下來會根據一個實例進行展開:
在這裏插入圖片描述
這張圖中共有14行數據,每個數據具有四個特徵,最後的play作爲label表示是否去打球。我們希望構建一棵決策樹,對於一條新數據,我們可以根據這四個特徵來對play進行一個判斷。首先,我們需要構建這麼一棵決策樹,那麼對於這個四個特徵,我們使用哪個作爲第一個分類結點呢?
在這裏插入圖片描述

2.決策樹的生成算法:

在沒有給定任何天氣信息時,根據歷史數據,我們只知道新的一條打球的概率是9/14,不打的概率是5/14,此時的熵爲:(914log2914+514log2514)=0.940-(\frac{9}{14} \log_2\frac{9}{14}+\frac{5}{14} \log_2\frac{5}{14})=0.940

建立決策樹的關鍵是在當前狀態下選擇哪個屬性作爲分類依據,隨着劃分的不斷進行,我們希望決策樹的分支結點所包含的樣本儘可能地屬於同一類別,即節點的純度越來越高。構造樹的基本想法是隨着樹深度的增加,節點的熵迅速地降低,熵降低的速度越快越好,這樣我們有望得到一棵高度最矮的決策樹。 根據不同的目標函數,建立決策樹主要有以下三種算法:

1)ID3:

條件熵: 何謂條件熵?既然稱之爲條件熵,其實也就是在滿足某個條件下的熵,那麼這個條件是什麼呢?這個條件是指某個變量確定的情況。當某個結點的分類標準確定以後,我們就可以計算此時的條件熵。

設有隨機變量(X,Y),其聯合概率分佈爲P(X=xi,Y=yj)=pij,i=1,2,..n;j=1,2...mP(X=x_i,Y=y_j)=p_{ij}, i=1,2,..n; j=1,2...m,則條件熵H(YX)H(Y|X)表示在已知隨機變量X的條件下隨機變量Y的不確定性。隨機變量X在給定條件下隨機變量Y的條件熵H(YX)H(Y|X)定義爲X給定條件下Y的條件概率分佈的熵對X的數學期望
H(YX)=i=1npiH(YX=xi)H(Y|X)=\sum_{i=1}^n p_iH(Y|X=x_i)

信息增益: 等於信息熵-條件熵,即父節點的信息熵減去各子節點的信息熵乘以其出現的概率,表示得知特徵X的信息而使得類Y的信息的不確定性減少的程度。
Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)Gain(D,a)=Ent(D)-\sum _{v=1} ^V \frac{|D^v|}{|D|}Ent(D^v)
一般地,熵H(Y)與條件熵H(Y|X)之差稱爲互信息,決策樹學習中的信息增益等價於訓練數據集中類與特徵的互信息。

對於上面的案例,我們使用ID3算法來生成決策樹。對於第一個分類結點,我們計算四種分類方式的信息增益。
基於天氣劃分時:
outlook=sunny時,p(play=yes)=25p(play=yes)=\frac{2}{5}p(play=no)=35p(play=no)=\frac{3}{5},可算出entropy=0.971entropy=0.971
outlook=overcast時,p(play=yes)=1p(play=yes)=1p(play=no)=0p(play=no)=0,可算出entropy=0entropy=0
outlook=rainy時,p(play=yes)=35p(play=yes)=\frac{3}{5}p(play=no)=25p(play=no)=\frac{2}{5},可算出entropy=0.971entropy=0.971
對於所有的樣本來說,p(outlook=sunny)=514p(outlook=sunny)=\frac{5}{14}p(outlook=overcast)=414p(outlook=overcast)=\frac{4}{14}p(outlook=rainy)=514p(outlook=rainy)=\frac{5}{14},所以已知變量outlook的值時,條件熵爲5140.971+4140+5140.971=0.693\frac{5}{14}*0.971+\frac{4}{14}*0+\frac{5}{14}*0.971=0.693
這樣的話系統熵就從0.940下降到了0.693,信息增益gain(outlook)=0.9400.693=0.247gain(outlook)=0.940-0.693=0.247

同樣可以計算gain(temperature)=0.029gain(temperature)=0.029gain(humidity)=0.152gain(humidity)=0.152gain(windy)=0.048gain(windy)=0.048,由於gain(outlook)gain(outlook)最大,即outlook在第一步使系統的信息熵下降的最快,所以決策樹的第一個結點取outlook。

往下的結點我們就可以通過遞歸以同樣的原理構建出來了。,有三種情形會導致遞歸返回: (1)當前結點包含的樣本全屬於同一類別,無需劃分; (2)當前屬性集爲空,或是所有樣本在所有屬性上取值相同,無法劃分; (3)當前結點包含的樣本集合爲空,不能劃分.

2)C4.5:

上面使用信息增益的方式存在這樣一個問題:考慮一種極端情況,假如我們的樣本存在一列叫做id,作爲每條數據的編號。但是實際上我們數據的label,是否去打球和這一列沒有任何關係。如果我們把這一列作爲算法中的特徵,那麼對於整個樣本集來說,可以根據這個屬性劃分爲14個分類,每個分類中只有一個樣本,信息熵爲0,信息增益最大。但是這樣的決策樹顯然不具有泛化能力,無法對新樣本進行有效預測。

爲了解決這種情況:即存在這樣的特徵,這種特徵裏面存在的屬性很多,但是每個屬性對應樣本的數量很少,這種情況下很有可能出現信息增益很大的情況。我們引入了信息增益率的概念。
Gain_ratio=Gain(D,a)IVaGain\_ratio=\frac {Gain(D,a)}{IV_a}
其中分子是某個分類依據對應的信息增益,分母是其自身的信息熵值,比如這裏的id,其信息熵等於i=114(114log114)-\sum_{i=1} ^{14}(\frac{1}{14}\log\frac{1}{14}),這樣的話,對於上面所說的這種特徵,其信息增益大,信息熵也大,最終得到的信息增益率是一個比較小的數。

需注意的是,增益率準則對可取值數目較少的屬性有所偏好,因此 C4.5 算法並不是直接選擇增益率最大的候選劃分屬性,而是使用了一個啓發式: 先從候選劃分屬性中找出信息增益高於平均水平的屬性,再從中選擇增益率最高的.

3.連續值處理:

在此之前我們僅討論了離散型特徵的處理,實際上,ID3算法不能處理連續值。在C4.5算法中是使用二分法來處理決策樹的。
在這裏插入圖片描述
需注意的是,與離散屬性不同,若當前結點劃分屬性爲連續屬性,該屬性還可作爲其後代結點的劃分屬性.

4.缺失值處理:

在這裏插入圖片描述
決策樹學習中還有可能遇到缺失值的情況,這個時候存在兩個問題:

  1. 如何在屬性值缺失的情況下選擇最優劃分屬性?
  2. 選定了劃分屬性,若樣本在該屬性上的值是缺失的,那麼該如何對這個樣本進行劃分?

對於問題(1) ,顯然我們僅可根據沒有缺失值的樣本子集來判斷屬性的優劣。之前的算法中,我們選擇信息增益最大的屬性作爲最優劃分屬性,那麼對於有缺失值的屬性,其信息增益就是無缺失值樣本所佔的比例乘以無缺失值樣本子集的信息增益。

例如計算上面缺失數據集特徵色澤的信息增益:
在這裏插入圖片描述
對於上面的屬性分別計算信息增益,可以得到紋理爲最佳特徵,紋理沒有缺失的樣本分別進入對應分支。編號爲{1,2,3,4,5,6,15}的7個樣本進入“紋理=清晰”的分支,編號爲{7,9,13,14,17}的5個樣本進入“紋理=稍糊”的分支,編號爲{11,12,16}的3個樣本進入“紋理=模糊”的分支。
對於編號爲 8和 10的缺失值樣本,將分別以7/15、5/15、3/15的權重劃分到以上3個分支。也就是說,將缺失值樣本按不同的概率劃分到了所有分支中,而概率則等於無缺失值樣本在每個分支中所佔的比例。
這裏引入了權重的概念,在學習開始時,樣本的默認權重爲1,對於無缺失值的樣本,劃分到子節點時其權重保持不變。

樣本有了權重,我們需要對信息增益的計算公式做一些改進,在接下來的信息增益計算中,我們需要考慮樣本的權重:
在這裏插入圖片描述
還是繼續剛纔的例子,下面的圖是對紋理=清晰的數據集進行繼續劃分,我們可以發現最後一列多了特權重值。
在這裏插入圖片描述
我們以計算色澤特徵的信息增益爲例來說明上面的公式。
在這裏插入圖片描述
上面的計算實際上和普通信息增益計算差別不大,只是將權重考慮了進去。

三、決策樹剪枝:

評價函數(損失函數):
構造完一棵決策樹之後,我們如何對這棵樹構建的好不好做一個評價呢?在之前的一些機器學習方法我們都有說過目標函數,那麼決策樹算法的目標函數是什麼呢?這裏我們引入了評價函數,來衡量模型對訓練數據的整體測量誤差。C(T)=tleafNtH(t)C(T)=\sum_{t \in leaf}N_t H(t)
對於上面這個式子,H(t)H(t)是某個葉子結點的熵值(或者基尼指數等),每個葉子結點可以看作一個集合,裏面每個元素是每個類別的樣本個數,NtN_t表示的就是當前葉子結點有幾個類別(如集合爲{1,1,1,2},那麼該結點Nt=4N_t=4),NtH(t)N_t H(t)就相當於給這個葉子結點加上了一個權重,乘上該結點的熵值。算法的目標是希望最終的每個葉子結點的純度是很大的,即這個評價函數越來越小,類似於損失函數了。
改進評價函數:
我們可以發現上面的這個式子,是在儘可能的對每一個分支劃分到最細,來降低評價函數的,這樣做的後果就是就是會產生過擬合的情況。我們給這個評價函數添加一個正則項,得到:Cα(T)=C(T)+αTleafC_α(T)=C(T)+α|T_{leaf}| 這裏的Tleaf{|T_{leaf}|}表示決策樹中葉子結點的個數,即模型複雜度,α的值是我們手工指定的,它是一個權重,控制了葉子結點的數目對最終結果產生的影響程度,我們認爲一棵決策樹的葉子結點的個數太多也是不好的,所以將這一項與前面說過的評價函數加和,作爲新的評價函數。

在決策樹的學習中,爲了儘可能正確分類訓練樣本,結點劃分過程將不斷重複,構建出來的可能是一棵高度很高,分支很多的決策樹。這種決策樹過於追求分類的正確率,可能將訓練集自身的一些特點當作所有數據的一般性質,從而學到了一些特殊點或者噪聲點,從而導致了過擬合,這樣的決策樹的泛化能力就會比較差,所以我們需要進行剪枝處理來對決策樹進行一些簡化。

剪枝,就是當α確定時,選擇損失函數最小的模型,即損失函數最小的子樹。當α值確定時,子樹越大,往往與訓練模型的擬合越好,但是模型的複雜度就越高;相反,子樹越小,模型的複雜度越低,但是往往與訓練模型的擬合不好,損失函數正好表示了對兩者的平衡。

決策樹生成學習局部的模型,而決策樹剪枝學習整體的模型。

1.預剪枝:

限制深度,葉子結點個數、葉子結點樣本數、信息增益量
指在決策樹生成過程中,對每個結點在劃分前進行估計,若當前結點的劃分不能帶來決策樹泛化性能的提升,則停止劃分並將當前結點標記爲葉結點。
一個結點分裂之前,我們可以使用上面的改進的評價函數來計算一個損失值,與不進行分裂之前的損失值進行對比

2.後剪枝:

通過一定的衡量標準比如損失函數
先從訓練集生成一棵完整的決策樹,然後自底向上對非葉節點進行考察,若該結點對應的子樹替換爲葉結點能帶來決策樹泛化性能的提升,則將該子樹替換爲葉結點。

四、CART算法

1.CART生成-迴歸樹

迴歸樹的目的是根據一個對象的信息預測該對象的屬性,並以連續型數值表示。
假設X與Y分別爲輸入和輸出變量,並且Y是連續變量,對於給定的數據集D=(x1,y1),(x2,y2),....,(xN,yN){(x_1,y_1),(x_2,y_2),....,(x_N,y_N)},生成迴歸樹。
迴歸樹也是一棵二叉樹,也涉及到選擇切分變量和切分點,如何對輸入空間進行劃分,尋找最優切分變量j和最優切分點s。我們使用的方法是:
遍歷變量j,對固定的切分變量j,掃描切分點s,根據切分點將數據分成兩部分,計算兩部分的預測值與真實值之間的誤差平方總和,選擇使得
在這裏插入圖片描述
達到最小值的切分變量j和切分點s。用選定的j和s劃分區域並決定相應的輸出值。繼續對兩個子區域調用這個過程,直到滿足停止條件。

2.CART生成-分類樹

CART 決策樹使用基尼指數來選擇劃分屬性,數據集的純度可用基尼指數來度量。在分類問題中,假設有K個類,樣本點屬於第k類的概率爲pkp_k​,則概率分佈的基尼指數定義爲:
在這裏插入圖片描述
對於給定的樣本集合D,其基尼指數爲:
在這裏插入圖片描述
這裏,CkC_k​是屬於第k類的樣本子集,K是類的個數。

基尼指數反映了從數據集中隨機抽取兩個樣本,其類別標記不一致的概率,因此,基尼指數越小,數據集的純度越高,這其實和信息熵的作用是相似的。我們在選擇候選屬性時,選擇使得劃分後基尼指數最小的屬性作爲最優劃分屬性。

與前面說到的ID3算法和C4.5算法不同的是,CART是一棵二叉樹,每一次分裂只會產生兩個節點。對於離散值的處理,會將其中一個離散值獨立爲一個節點,其他的離散值生成另外一個節點。

五、三種算法的對比

  1. ID3算法
  • 可以有多個分支
  • 只能處理離散型數據,如果處理連續型數據只有事先將連續型特徵轉換爲離散型,這樣會破壞連續型變量的內在性質。
  • 每次選取的分割數據的特徵都是當前的最佳選擇,並不關心是否達到最優,是一種貪心算法
  • 每次選擇一個特徵進行分割後就不會再去使用它,快速切割的方式會影響算法的準確率
  1. C4.5算法
  • 使用信息增益比率來作爲選擇分支的準則
  • 能夠完成對連續屬性的離散化處理
  • 能夠處理有缺失值的數據集
  • 對連續屬性值需要掃描排序,會使性能下降
  1. CART算法
  • CART是一棵二叉樹,採用二元切分法,準確率更高
  • 既可以用於分類也可以用於迴歸
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章