這里開始機器學習的筆記記錄。今天的這篇是一個分類方法--決策樹。
方法 | 適用問題 | 模型特點 | 模型類別 | 學習策略 | 學習的損失函數 | 學習算法 |
---|---|---|---|---|---|---|
決策樹 | 多類分類,回歸 | 分類樹,回歸樹 | 判別模型 | 正則化的極大似然估計 | 對數似然損失 | 特征選擇,生成,剪枝 |
決策樹
優點:計算復雜度不高,輸出結果易于理解,對中間值的缺失不敏感,可以處理不相關特征數據。
缺點:可能會產生過擬合的問題。
適用數據類型:數值型和標稱型
本文內容大部分來自于《統計學習方法》。
先來看看決策樹是什么?
決策樹模型就是個樹形結構。由結點(node)和有向邊(directed edge)組成。結點分內部結點和葉結點。內部結點是一個特征,葉結點是類別。如圖5-1:
決策樹可以看做一個if-then規則的集合,即如上圖的由根結點到葉結點的每一條路徑構建一條規則,特征對應規則的條件,葉結點就是結論。每個實例都被一條路徑或規則所覆蓋,而且只被一條路徑或規則覆蓋。即實例的特征與那條路徑上的特征表現一致。
決策樹葉可以看成給定特征條件下類的條件概率分布。將特征空間進行劃分成很多個單元,每個單元定義一個類的概率分布。
決策樹的本質上是從訓練樣本中歸納出一組分類規則,也是估計條件概率模型。(所以說是判別模型)
先看書上的一道例題:
在用決策樹做分類的過程中,我們需要一步一步的選取特征來劃分。可是,比如說在例題當中,有4個特征,選擇任意一個都能進行決策樹的劃分,比如年齡和是否有工作兩個特征,分別選取都可以讓決策樹進行下去:
那么我們首先選擇哪個特征來進行劃分呢?
當然是該選擇一個好的特征。怎樣才算好呢?直觀上,如果一個特征具有更好的分類能力(能將訓練集分割成子類,使得各個子類在當前條件下有更好的分類),那么這個特征就可以當做好特征。
那么如何評判某特征是個好特征呢?
書上給出的是一種叫信息增益和基尼系數的指標。下面就分別來看看。
1.信息增益
什么是信息增益呢?這與信息論中的熵和條件熵有關。也就是通過信息論的一套來劃分數據集。
首先一個概念:信息熵是表示隨機變不確定性的度量。熵越大,信息量越大,也就是越不確定。
熵的定義如下:
p(x)表示的是概率分布,對數可以以2或者e為底都可以,這時只是熵的單位不同,并沒有什么區別。(以2為底叫比特,以e為底叫納特)
不過熵為什么要這樣定義呢?
可以試著解釋下,先看看“越不確定”是什么意思?可以看成發生的概率越小。因此事件發生的概率越小,信息量就越大。比如說本來認為不可能的事發生了,給人的信息量就很大。
如果兩個事件是獨立的,則
如果在這里設置表示兩個事件信息量的函數為h(x1)和h(x2),那么二者同時發生的信息量可以這樣表示:
(因為用加法更直觀方便)
如何把概率和信息量聯系起來呢?看公式的話,可以看到乘法取個對數就能變成加法,因此我們可以假定h(x)=log(p(x)),但p(x)是小于1的,這樣取出來是負數,為了讓它是正數形式上好看些,那就取個負吧。這樣,信息量的表示就成了:
單個事件的信息量就這樣表示了出來。。而熵呢?熵就是所有信息量相加了:
為什么要乘以概率,因為熵應該表示總事件的信息期望(平均),因此要乘以單獨事件發生的概率。
那么條件熵又是什么呢?
條件熵是表示在已知隨機變量X的條件下隨機變量Y的不確定性。
而信息增益就是在集合D的經驗熵H(D)與特征A給定條件下D的經驗條件熵之差:
在決策樹中,經驗熵H(D)表示對數據集D進行分類的不確定性;而H(D|A)表示在特征A給定的條件下對數據集D進行分類的不確定性;它們的差就表示由于特征A而使對數據集D的分類的不確定性減少的程度,即信息增益。(就是劃分數據之前之后信息熵發生的變化叫信息增益。)
如此定義后,我們就認為信息增益大的那個特征是好特征了。信息增益大的那個特征就是在劃分數據時起決定性作用的那個特征。
那么如何計算信息增益?在書上給了公式(簡書不支持Latex,公式真的挺難弄,只能截圖了):
看到信息增益的公式,其實信息增益就是互信息。
另外,在信息增益的基礎上,還可以使用信息增益比來表示特征選擇的準則。
2.基尼系數
前面說了除信息增益外,還可以用基尼系數來表示特征選擇的準則。
那基尼系數又表示的是什么呢?
基尼系數同樣可以表示樣本集合的不確定性。
在分類問題中,假設有K個類,樣本點屬于第k類的概率是Pk,則概率分布的基尼系數定義為:
從公式看就是被分對的概率乘以被分錯的概率,然后整個的和就是基尼系數。
其實和熵比起來似乎就是定義概念不一樣,公式感覺是差不多的啊:
都是概率乘以一個東西,然后求和。也就是求期望。基尼系數也就是把log(p)改為了1-p。熵前面加個負號只是為了讓值成為正數而已。
如果是二分類的話(概率p1=(1-p2)),那么基尼系數化簡就是:
在特征A的條件下,集合D的基尼系數表示法也和條件熵的表示法蠻像的,也就是條件基尼系數。如果都以二分類來做對比的話,公式分別如下:
看上去形式簡直就是一模一樣啊。這里書上介紹基尼指數值越大,就表示不確定性越大,所以應選擇基尼系數最小的特征及對應切分點作為最優特征。
那么為什么基尼系數和熵一樣能夠表示不確定性呢?《統計學習方法》書上有這樣一幅圖:
基尼系數和熵之半(也就是熵的一半值)的曲線比較近似。
曾經看到過一個解釋,熵的公式中有一個log對數,而f(x)=-lnx在x=1處一階泰勒展開,忽略掉高次項,可以得到f(x)≈1-x。這樣pklogpk≈pk(1-pk)了,就更可以看到基尼指數與熵很近似了。
決策樹的生成
算好了信息增益后,就可以進行決策樹的生成了。通過應用信息增益準則來選取特征的這一種方法而進行決策樹的構建叫ID3算法。
ID3算法的核心是在決策樹各個結點上應用信息增益準則來選擇特征,遞歸的構建決策樹。
具體方法如下:
從根結點開始,對結點計算所有可能的特征的信息增益,選擇信息增益最大的特征作為結點的特征,由該特征的不同取值來建立子結點;再對子結點遞歸的調用以上方法,構建決策樹;直到所有特征的信息增益均很小或沒有特征可以選擇為止。
ID3算法步驟:
另外,還可以用信息增益比的形式來選擇特征,這樣的算法叫做C4.5算法。
C4.5算法的步驟:
最后還有一種是通過樣本集合D的基尼系數來進行特征選取,而依據這樣一種準則的樹生成算法叫CART算法。
CART全稱叫分類與回歸樹(classification and regression tree),因此可以看到決策樹不僅可以做分類,還可以用于回歸呢。
CART假設決策樹是二叉樹,左邊的分支取值為“是”,右邊的分支取值為“否”。
CART生成算法步驟:
決策樹的剪枝
決策樹容易產生過擬合現象,這樣的話雖然對已知的訓練數據分類很準確,但對于未知的測試數據就沒那么準確了。過擬合的原因是在學習時過多的考慮如何提高對訓練樣本的正確分類,從而構建了過于復雜的決策樹。因此,為了解決過擬合現象,可以對已生成的決策樹進行簡化,這就是剪枝。
上面所介紹的三種決策樹的剪枝過程是相同的,不同的僅僅是對于當前樹所用的評價標準不同,也就是上面說過的信息增益、信息增益比或基尼系數。
剪枝的總體思路如下:
由完全樹T0開始,剪枝部分結點得到T1,再次剪枝部分結點得到T2,直到剪枝到僅剩下樹根的那棵樹Tk。當然這些樹都要保留{T1,T2,....,Tk};
接著通過交叉驗證法在驗證數據集上對這k棵樹分別進行測試評價,選擇損失函數最小的數Tα作為最優子樹。
那么來看看決策樹的損失函數定義:
其中|T|為樹T的葉節點個數,t是數T的葉節點,該葉節點上有Nt個樣本,其中k類的樣本有Ntk個。Ht(T)就是葉節點t上的經驗熵:
將公式簡化一下表示:
其中:
這樣,C(T)就表示模型對訓練數據的預測誤差,|T|就表示模型復雜度,也就是說葉結點越多,決策樹越復雜,損失就越大。α就是那個控制值了,其實后面就相當于正則化的存在。當α=0時,未剪枝的決策樹損失最小;當α=+∞時,單根結點的決策樹損失最小。α越小,選擇的樹越復雜。因此,才說模型選擇就是用正則化的極大似然估計。