統計學習方法筆記 -- 決策樹

決策樹
什麼是決策樹?
image 
image 
決策樹能夠當作一系列if-then的規則,這個很好理解
也能夠當作是條件機率分佈,
X爲特徵,x1,x2
Y爲分類,1,-1
那麼對於每一個葉節點,至關於對於每一個通過的中間結點的條件機率
當x1=a,x2=b的時候爲1分類的機率>0.5,則認爲是1分類算法

決策樹學習
決策樹學習的本質是從訓練數據集上概括出一組分類規則
但與訓練集不相矛盾的決策樹可能有多個,也可能一個都沒有
咱們的目標是找到一個和訓練集矛盾較小,且具備很好的泛化能力的決策樹(注意不要求沒有矛盾,要防止overfit)
決策樹學習的損失函數一般是正則化的極大似然函數,可是基於損失函數找到全局最優決策樹是NP徹底問題
因此實際使用的算法一般採用啓發式的方法,即局部最優
具體作法就是,每次選擇feature時,都挑選擇當前條件下最優的那個feature做爲劃分規則,即局部最優的feature函數

決策樹學習一般分爲3個步驟:特徵選擇,決策樹生成和決策樹的修剪學習

特徵選擇
前面已經說了,選擇特徵的標準是找出局部最優的特徵
那麼問題是若是判斷一個特徵對於當前數據集的分類效果?即以這個特徵進行分類後,數據集是否更近有序(不一樣分類的數據被儘可能分開),仍是仍然很混亂?
這裏要使用熵(entropy)和信息增益編碼

參考http://zh.wikipedia.org/wiki/%E7%86%B5_%28%E4%BF%A1%E6%81%AF%E8%AE%BA%293d

信息量
信息量有這個事件發生的機率所決定,常常發生的事件是沒有什麼信息量的,好比你每天要吃飯,這個你們都知道。
只有小几率事件纔有信息量,好比馬航失蹤這種突發新聞,因此信息量的定義以下
以2爲底,單位是bit,以e爲底,單位是nat,以10爲底,單位是dit
image
好比下面的例子,能夠看出漢字的信息量要遠遠大於英文字母的(固然現實中,不可能全部字出現的機率同樣,這裏只是爲了簡單處理說明問題)
這就意味着寫同一篇文章,漢字會更加簡短,固然學習門檻也會更高
image blog

信息熵
熵,就是信息量的指望
image
熵起源於物理熱力學系統,表示無序程度,一樣在信息論中,熵表示對不肯定性的測量
若是有一枚理想的硬幣,其出現正面和反面的機會相等,則拋硬幣事件的熵等於其可以達到的最大值,這時候這個事件的熵爲1bit,而當拋出正面的機率變大或變小時不肯定性都會下降,極限狀況必定爲正或負時,沒有任何不肯定性,熵爲0
image 
數據壓縮也是基於熵理論,普通的編碼方式每一個字符都是8bit,很浪費,由於英文字母的熵在4.7bit左右,這個表示編碼的最小平均長度,好的無損壓縮算法應該能夠接近這個編碼長度事件

聯合熵
image
條件熵
image
ip

信息增益
表示得知特徵X的信息而使得類Y的信息的不肯定性減小的程度
分類前,數據中可能出現各類類的狀況,比較混亂,不肯定性強,熵比較高
分類後,不一樣類的數據獲得比較好的劃分,那麼在一個劃分中大部分是同一類的數據,比較有序,不肯定性下降,熵比較低
而信息增益用於描述這種熵的變化
image get

下面給出計算信息增益的具體的公式,
H(D),直接根據公司計算
而H(D|A),D根據A分爲n份D1…Dn,那麼H(D|A)就是全部H(Di)的指望(平均值)it

image
image 

用書中的例子來解釋一下,貸款申請訓練集,想建決策樹來輔助判斷是否能夠貸款
image 
首先用哪一個特徵來劃分了是」年齡」,仍是」有工做」?

image

直接用上面的公式來計算信息增益來判斷
首先算下爲分類時的經驗熵,所謂經驗熵就是根據訓練數據算出的熵

image

這裏分別以A1,A2表示」年齡」」有工做」兩個特性,這裏爲了說明問題只考慮兩個特性
關於年齡的信息增益計算,樣本中青年,中年,老年各5個,而後每一個劃分中是否貸款比例分別爲,2:3,3:2,4:1。能夠直觀的看出劃分效果不明顯,因此算出的信息增益也確實很小
image

而對於有工做的,算出的信息增益要大不少,這也是符合直觀的判斷
image
因此若是要在這兩個特徵裏面選擇的話,應該選「有工做」

信息增益比
單純的信息增益只是個相對值,由於這依賴於H(D)的大小
因此定義信息增益比做爲更加客觀的度量
image

 

決策樹生成
先介紹ID3生成算法,這是最基本的算法
而C4.5只是把其中的信息增益換成信息增益比
算法很簡單,只是在每一個節點上選出信息增益最大的那個特徵進行劃分
直到信息增益小於闕值時中止
由於信息增益是相對值,因此這裏使用信息增益來比較闕值不合理
在C4.5中使用信息增益比來替代

image 
image

 

決策樹的剪枝(pruning)
決策樹生成算法對於訓練集是很準確的,可是這樣會過擬合,因此須要經過剪枝(簡化過程)來提升泛化能力
剪枝的思路也很簡單,就是在決策樹對訓練數據的預測偏差和樹複雜度之間找到一個balance
預測偏差表示爲,即全部葉節點的經驗熵的和,其中Nt表示該葉節點的樣本點個數,而Ht(T)表示該葉節點的經驗熵
image
樹複雜度,由葉節點個數來表示,|T|

因此決策樹的學習損失函數定義爲,剪枝的標準就是極小化該損失函數
image 
image 是調節參數,越大表示選擇更簡單的樹,而越小表示選擇複雜的對訓練集擬合度高的樹

剪枝的算法
很簡單,從葉節點往上回溯,比較剪掉該葉節點先後的損失函數的值,若是剪掉後,損失函數更小就剪掉

image 

image

 

CART算法
這裏只看分類樹的相關算法,迴歸樹即輸出連續的case,參考原書

生成算法
和ID3兩點不一樣,
首先是二叉樹,好比對於年齡不是分爲青年,中年,老年,而是選一個子特性進行二分,好比青年,不是青年
再者,基於基尼指數,也是用於表示不肯定性,和熵相似
image 

image

具體生成算法,仍是看前面那個例子,
image 
對於年齡的每一個子特徵的gini指數
image
A2和A3都只有一個切分點
image 
最後是A4的
image 
最後,發現最優的切分點是image

剪枝算法
CART的剪枝算法比較特別
首先樹上任意一個節點t,若是以t爲單節點樹(即意味着把t的子樹剪掉)的損失函數爲
image
以t爲根節點的子樹Tt的損失函數是
image 
若是image,不考慮樹複雜度,那麼必定是image ,即不剪枝的狀況下,損失函數更小
可是隨着image 不斷增大,必定會出現image ,即剪不剪枝,損失函數相等,那麼還不如剪了讓樹簡單一點
此時,
image
固然若是image過於大就沒有意義了,由於咱們須要balance對訓練集的擬合度以及樹的複雜度
因此算法是,
image 
image 
image

具體的說,對整個樹T0的每一個節點計算g(t),
先將g(t)最小的節點進行剪枝,產生子樹T1
而後再T1上再找到g(t)最小的節點進行剪枝。。。在這個過程當中g(t)是不斷變大的,最終剪到根節點Tn(單節點樹)
最終,
image

相關文章
相關標籤/搜索