【機器學習】決策樹(一)----學習步驟和常用算法ID3以及C4.5

決策樹分開兩部分,是因爲CART算法還是有些麻煩的,對於迴歸樹我還是存在一些問題,希望後面整理的時候能夠理清楚。

【學習思想】

決策樹的學習思想還是很通俗易懂的。一般我們去買東西,我們會對這個東西的一些特徵做一個衡量來決定是否購買,比如我們可能會看這個東西的大小是否合適,如果合適,我們可能會看這個東西的材質是否滿意,滿意的話我們會繼續在意它的價格是否合理。這樣一步一步下來,我們就能構造出一個樹形模型。不過我們在構造樹的時候,第一個選擇什麼特徵作爲我們的衡量標準,下一個選擇什麼特徵來衡量,這是一個問題,因此我們要做出特徵選擇。當我們要買一個新東西(同功用)的時候,我們就可以根據以前生成的樹形模型,來判斷我們是否會購買。這裏買與不買是一個二分類問題,多分類問題與其思想也是一樣的,決策樹模型可讀性很高,且分類速度很快。

【學習步驟】

①特徵選擇:特徵選擇即我們用哪個特徵來劃分空間。我們常用信息增益、信息增益比或基尼係數來作爲劃分依據。
②決策樹的生成:常用算法有ID3,C4.5,CART
②決策樹的剪枝:常用方法有極小化決策樹整體的損失函數、CART剪枝算法

【①特徵選擇】

選擇最佳劃分的度量通常是根據劃分後子女節點不純性的程度。不純的程度越低,類分佈就越傾斜。不純性度量有熵、基尼、classification error。由於在ID3和C4.5中我們分別是用信息增益和信息增益比,在CART的分類樹上是用基尼係數來做特徵選擇。因此我們要對信息增益、信息增益比以及基尼係數的計算有個瞭解。

信息增益

輸入:訓練數據集D 、特徵A
輸出:特徵A對訓練數據集D的信息增益g(D,A)
1.DH(D)
   H(D)=k=1K|Ck||D|log2|Ck||D|
   |D||Ck|Ck
2.ADH(D|A)
   H(D|A)=i=1n|Di||D|H(Di)=i=1n|Di||D|k=1K|Dik||Di|log2|Dik||Di|
   |Dik|DiCk|Di|Ai
3.
   g(D,A)=H(D)H(D|A)
   

信息增益比

輸入:訓練數據集D 、特徵A
輸出:特徵A對訓練數據集D的信息增益比gR(D,A)
1.DAHA(D)
   HA(D)=i=1n|Di||D|log2|Di||D|
2.
   gR(D,A)=g(D,A)HA(D)

基尼指數

輸入:訓練數據集D 、特徵A
輸出:特徵A對訓練數據集D的基尼指數Gini(D,A)
1.p
   Gini(p)=2p(1p)
CART
Gini

2.ADGini(D,A)
   Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

【②決策樹生成算法】

由於C4.5與ID3的區別只在於特徵選擇上,因此算法結構是一樣的。
C4.5是ID3的改進,因爲ID3採用信息增益的方式選擇特徵,會對某些可取類別(值)數目較多的屬性有所偏好(如學號,學號取值很多,其信息增益很大,但實際分類意義不強,不具有泛化能力)

ID3/C4.5 的生成算法:

輸入:訓練數據集D ,特徵集A ,閾值ε
輸出:決策樹T
(1)若D 中樣本全屬於同一類別Ck ,則將node 標記爲Ck 類葉節點,返回T;

5.1()

(2)若D 中樣本在A 上取值相同或A= ,則將node 標記爲葉節點,其類別標記爲D 中樣本數量最多的類,返回T

15


A

(3)若是以上兩種情況都未發生,那麼計算A 中各特徵對D 的信息增益/ ,選擇信息增益/ 最大的特徵Ag ,若Ag 的信息增益/ 小於閾值ε ,則將node 標記爲D 中樣本數最多的類;

/


(4)否則對Ag 的每一可能值ai ,依Ag=aiD 分割爲若干個非空的Di ,將Di 中樣本數最多的類作爲類別標記,構建子節點,由節點及其子節點構成樹T ,返回T
(5)對節點i,以Di 爲訓練集,以A{Ag} 爲特徵集,遞歸調用(1)~(5),得到子樹Ti ,返回Ti

【③決策樹剪枝算法】

在瞭解決策樹剪枝算法之前,我們先來看看決策樹最顯著的缺點,那就是容易過擬合。我們可能會學習了一個很複雜的樹,它對於訓練集有很好的擬合效果,但是對於新輸入的數據來說,卻無法給出好的分類。因此,爲了讓複雜的樹簡單些,提出了剪枝算法。
這這裏先複習《統計學習方法》上給出的一種剪枝算法,即極小化決策樹整體的損失函數。

決策樹學習的損失函數

我們用|T| (樹T 的葉節點個數)來表示模型的複雜度。
經驗熵:Ht(T)=kKNtkNtlog(NtkNt)
Ht(T)tNtt
NtkNtkK

定義決策樹學習的損失函數爲:
Cα(T)=t=1|T|NtHt(T)+α|T|=t=1|T|kKNtklog(NtkNt)+α|T|

C(T)=t=1|T|kKNtklog(NtkNt) ,用於表示模型對訓練數據的誤差,即模型與訓練數據的擬合程度。
可以得到:Cα(T)=C(T)+α|T|
α 是控制模型複雜度和模型誤差之間比重的參數,若α 小,則選擇較複雜的模型(即|T| 較大);若α 大,則選擇較簡單的模型(即|T| 較小)。這樣能夠很好地平衡過擬合(方差)與誤差(偏差)

剪枝算法(基於極小化決策樹整體的損失函數)

輸入:由生成算法得到的整個樹T ,參數α
輸出:修剪後的子樹Tα
(1)計算每一個葉節點的經驗熵;
(2)遞歸地從樹的葉節點向上回縮;
(3)計算剪枝前整體樹Tbefore 和剪枝後Tafter 的損失函數Cα(Tbefore)Cα(Tafter)
(4)若剪枝後的損失函數Cα(Tafter) 小於剪枝前的損失函數Cα(Tbefore) ,則進行剪枝,將父節點變爲新的葉節點;
(5)返回(2),直至不能繼續爲止,得到損失函數最小的子樹Tα

通過對決策樹的生成算法和剪枝算法的學習,我們可以看出決策樹生成希望得到更好的擬合效果,而決策樹剪枝通過優化損失函數還考慮了模型的複雜度。決策樹生成學習局部的模型,決策樹剪枝學習整體的模型。

決策樹的計算確實不難,我覺得可以通過對例題,習題的計算來加快理解,在真正應用當中,決策樹通常會被用到集成學習當中作爲基函數,如隨機森林,梯度提升樹等(大多選擇cart tree)

參考文獻:《統計學習方法》、《數據挖掘導論》

發佈了45 篇原創文章 · 獲贊 37 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章