機器學習筆記--決策樹

weixin_34236497發表於2017-03-25

這裡開始機器學習的筆記記錄。今天的這篇是一個分類方法--決策樹。

方法 適用問題 模型特點 模型類別 學習策略 學習的損失函式 學習演算法
決策樹 多類分類,迴歸 分類樹,迴歸樹 判別模型 正則化的極大似然估計 對數似然損失 特徵選擇,生成,剪枝

決策樹
優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關特徵資料。
缺點:可能會產生過擬合的問題。
適用資料型別:數值型和標稱型

本文內容大部分來自於《統計學習方法》。

先來看看決策樹是什麼?

決策樹模型就是個樹形結構。由結點(node)和有向邊(directed edge)組成。結點分內部結點和葉結點。內部結點是一個特徵,葉結點是類別。如圖5-1:

40658-81be595b99df1c0f.png
決策樹模型

決策樹可以看做一個if-then規則的集合,即如上圖的由根結點到葉結點的每一條路徑構建一條規則,特徵對應規則的條件,葉結點就是結論。每個例項都被一條路徑或規則所覆蓋,而且只被一條路徑或規則覆蓋。即例項的特徵與那條路徑上的特徵表現一致。

決策樹葉可以看成給定特徵條件下類的條件概率分佈。將特徵空間進行劃分成很多個單元,每個單元定義一個類的概率分佈。

決策樹的本質上是從訓練樣本中歸納出一組分類規則,也是估計條件概率模型。(所以說是判別模型)

先看書上的一道例題:

40658-5fd613317256629b.png

40658-1281a23be1928d8e.png

在用決策樹做分類的過程中,我們需要一步一步的選取特徵來劃分。可是,比如說在例題當中,有4個特徵,選擇任意一個都能進行決策樹的劃分,比如年齡和是否有工作兩個特徵,分別選取都可以讓決策樹進行下去:

40658-ed93a9c56f58963b.png
特徵選擇不同,分支不同

那麼我們首先選擇哪個特徵來進行劃分呢?

當然是該選擇一個好的特徵。怎樣才算好呢?直觀上,如果一個特徵具有更好的分類能力(能將訓練集分割成子類,使得各個子類在當前條件下有更好的分類),那麼這個特徵就可以當做好特徵。

那麼如何評判某特徵是個好特徵呢?

書上給出的是一種叫資訊增益基尼係數的指標。下面就分別來看看。

1.資訊增益

什麼是資訊增益呢?這與資訊理論中的熵和條件熵有關。也就是通過資訊理論的一套來劃分資料集。

首先一個概念:資訊熵是表示隨機變不確定性的度量。熵越大,資訊量越大,也就是越不確定。

熵的定義如下:

40658-e973001aa426cbc3.png
熵的定義

p(x)表示的是概率分佈,對數可以以2或者e為底都可以,這時只是熵的單位不同,並沒有什麼區別。(以2為底叫位元,以e為底叫納特)

不過熵為什麼要這樣定義呢?
可以試著解釋下,先看看“越不確定”是什麼意思?可以看成發生的概率越小。因此事件發生的概率越小,資訊量就越大。比如說本來認為不可能的事發生了,給人的資訊量就很大。

如果兩個事件是獨立的,則


40658-160522d9d1ea4916.png

如果在這裡設定表示兩個事件資訊量的函式為h(x1)和h(x2),那麼二者同時發生的資訊量可以這樣表示:

40658-efe6c06005a42410.png

(因為用加法更直觀方便)

如何把概率和資訊量聯絡起來呢?看公式的話,可以看到乘法取個對數就能變成加法,因此我們可以假定h(x)=log(p(x)),但p(x)是小於1的,這樣取出來是負數,為了讓它是正數形式上好看些,那就取個負吧。這樣,資訊量的表示就成了:


40658-6956a9432149660e.png

單個事件的資訊量就這樣表示了出來。。而熵呢?熵就是所有資訊量相加了:

40658-b3fd2fcfd03b54b5.png

為什麼要乘以概率,因為熵應該表示總事件的資訊期望(平均),因此要乘以單獨事件發生的概率。

那麼條件熵又是什麼呢?
條件熵是表示在已知隨機變數X的條件下隨機變數Y的不確定性。

而資訊增益就是在集合D的經驗熵H(D)與特徵A給定條件下D的經驗條件熵之差:

40658-2e6dd5c710584a3e.png

在決策樹中,經驗熵H(D)表示對資料集D進行分類的不確定性;而H(D|A)表示在特徵A給定的條件下對資料集D進行分類的不確定性;它們的差就表示由於特徵A而使對資料集D的分類的不確定性減少的程度,即資訊增益。(就是劃分資料之前之後資訊熵發生的變化叫資訊增益。)

如此定義後,我們就認為資訊增益大的那個特徵是好特徵了。資訊增益大的那個特徵就是在劃分資料時起決定性作用的那個特徵。

那麼如何計算資訊增益?在書上給了公式(簡書不支援Latex,公式真的挺難弄,只能截圖了):


40658-d1e25a92190228e5.png
40658-e7f8bf48c75e3c6f.png

看到資訊增益的公式,其實資訊增益就是互資訊。

另外,在資訊增益的基礎上,還可以使用資訊增益比來表示特徵選擇的準則。

40658-16291ab6bfae2896.png
資訊增益比
2.基尼係數

前面說了除資訊增益外,還可以用基尼係數來表示特徵選擇的準則。

那基尼係數又表示的是什麼呢?

基尼係數同樣可以表示樣本集合的不確定性。

在分類問題中,假設有K個類,樣本點屬於第k類的概率是Pk,則概率分佈的基尼係數定義為:

40658-fb638d3013c6cfa5.png
基尼指數

從公式看就是被分對的概率乘以被分錯的概率,然後整個的和就是基尼係數。

其實和熵比起來似乎就是定義概念不一樣,公式感覺是差不多的啊:

40658-7837b7f1610b1c4f.png

都是概率乘以一個東西,然後求和。也就是求期望。基尼係數也就是把log(p)改為了1-p。熵前面加個負號只是為了讓值成為正數而已。

如果是二分類的話(概率p1=(1-p2)),那麼基尼係數化簡就是:

40658-0c95e87fd58b797c.png
二分類基尼係數公式

在特徵A的條件下,集合D的基尼係數表示法也和條件熵的表示法蠻像的,也就是條件基尼係數。如果都以二分類來做對比的話,公式分別如下:

40658-9731ce654dea444b.png
40658-bd214cc6d6818f94.png

看上去形式簡直就是一模一樣啊。這裡書上介紹基尼指數值越大,就表示不確定性越大,所以應選擇基尼係數最小的特徵及對應切分點作為最優特徵。

那麼為什麼基尼係數和熵一樣能夠表示不確定性呢?《統計學習方法》書上有這樣一幅圖:

40658-24f62052d3f57559.png

基尼係數和熵之半(也就是熵的一半值)的曲線比較近似。

曾經看到過一個解釋,熵的公式中有一個log對數,而f(x)=-lnx在x=1處一階泰勒展開,忽略掉高次項,可以得到f(x)≈1-x。這樣pklogpk≈pk(1-pk)了,就更可以看到基尼指數與熵很近似了。

決策樹的生成

算好了資訊增益後,就可以進行決策樹的生成了。通過應用資訊增益準則來選取特徵的這一種方法而進行決策樹的構建叫ID3演算法。

ID3演算法的核心是在決策樹各個結點上應用資訊增益準則來選擇特徵,遞迴的構建決策樹。

具體方法如下:

從根結點開始,對結點計算所有可能的特徵的資訊增益,選擇資訊增益最大的特徵作為結點的特徵,由該特徵的不同取值來建立子結點;再對子結點遞迴的呼叫以上方法,構建決策樹;直到所有特徵的資訊增益均很小或沒有特徵可以選擇為止。

ID3演算法步驟:

40658-3dff22102ee2bc2b.png
40658-12b57b8d806e8357.png

另外,還可以用資訊增益比的形式來選擇特徵,這樣的演算法叫做C4.5演算法。

C4.5演算法的步驟:

40658-fcc81e6ed930495a.png

最後還有一種是通過樣本集合D的基尼係數來進行特徵選取,而依據這樣一種準則的樹生成演算法叫CART演算法。

CART全稱叫分類與迴歸樹(classification and regression tree),因此可以看到決策樹不僅可以做分類,還可以用於迴歸呢。

CART假設決策樹是二叉樹,左邊的分支取值為“是”,右邊的分支取值為“否”。

CART生成演算法步驟:

40658-04f8b8b00653cfe3.png
40658-7bc5158ebb9aefdd.png

決策樹的剪枝

決策樹容易產生過擬合現象,這樣的話雖然對已知的訓練資料分類很準確,但對於未知的測試資料就沒那麼準確了。過擬合的原因是在學習時過多的考慮如何提高對訓練樣本的正確分類,從而構建了過於複雜的決策樹。因此,為了解決過擬合現象,可以對已生成的決策樹進行簡化,這就是剪枝。

上面所介紹的三種決策樹的剪枝過程是相同的,不同的僅僅是對於當前樹所用的評價標準不同,也就是上面說過的資訊增益、資訊增益比或基尼係數。

剪枝的總體思路如下:

由完全樹T0開始,剪枝部分結點得到T1,再次剪枝部分結點得到T2,直到剪枝到僅剩下樹根的那棵樹Tk。當然這些樹都要保留{T1,T2,....,Tk};

接著通過交叉驗證法在驗證資料集上對這k棵樹分別進行測試評價,選擇損失函式最小的數Tα作為最優子樹。

那麼來看看決策樹的損失函式定義:

40658-3a378a02e05554c7.png

其中|T|為樹T的葉節點個數,t是數T的葉節點,該葉節點上有Nt個樣本,其中k類的樣本有Ntk個。Ht(T)就是葉節點t上的經驗熵:

40658-c0312b8559fca61b.png

將公式簡化一下表示:

40658-c5db68fa51e11a3c.png

其中:

40658-ab45a05aaf5f3164.png

這樣,C(T)就表示模型對訓練資料的預測誤差,|T|就表示模型複雜度,也就是說葉結點越多,決策樹越複雜,損失就越大。α就是那個控制值了,其實後面就相當於正則化的存在。當α=0時,未剪枝的決策樹損失最小;當α=+∞時,單根結點的決策樹損失最小。α越小,選擇的樹越複雜。因此,才說模型選擇就是用正則化的極大似然估計。

40658-d5b0a70f5babcc38.png
40658-82f9e7c77cdfe296.png

相關文章