決策樹分開兩部分,是因爲CART算法還是有些麻煩的,對於迴歸樹我還是存在一些問題,希望後面整理的時候能夠理清楚。
【學習思想】
決策樹的學習思想還是很通俗易懂的。一般我們去買東西,我們會對這個東西的一些特徵做一個衡量來決定是否購買,比如我們可能會看這個東西的大小是否合適,如果合適,我們可能會看這個東西的材質是否滿意,滿意的話我們會繼續在意它的價格是否合理。這樣一步一步下來,我們就能構造出一個樹形模型。不過我們在構造樹的時候,第一個選擇什麼特徵作爲我們的衡量標準,下一個選擇什麼特徵來衡量,這是一個問題,因此我們要做出特徵選擇。當我們要買一個新東西(同功用)的時候,我們就可以根據以前生成的樹形模型,來判斷我們是否會購買。這裏買與不買是一個二分類問題,多分類問題與其思想也是一樣的,決策樹模型可讀性很高,且分類速度很快。
【學習步驟】
①特徵選擇:特徵選擇即我們用哪個特徵來劃分空間。我們常用信息增益、信息增益比或基尼係數來作爲劃分依據。
②決策樹的生成:常用算法有ID3,C4.5,CART
②決策樹的剪枝:常用方法有極小化決策樹整體的損失函數、CART剪枝算法
【①特徵選擇】
選擇最佳劃分的度量通常是根據劃分後子女節點不純性的程度。不純的程度越低,類分佈就越傾斜。不純性度量有熵、基尼、classification error。由於在ID3和C4.5中我們分別是用信息增益和信息增益比,在CART的分類樹上是用基尼係數來做特徵選擇。因此我們要對信息增益、信息增益比以及基尼係數的計算有個瞭解。
信息增益
輸入:訓練數據集D 、特徵A
輸出:特徵A對訓練數據集D的信息增益g(D,A)
1.數據集D的經驗熵H(D)
H(D)=−∑k=1K|Ck||D|log2|Ck||D|
|D|爲訓練樣本總數,|Ck|爲類Ck的個數
2.特徵A對數據集D的經驗條件熵H(D|A)
H(D|A)=∑i=1n|Di||D|H(Di)=−∑i=1n|Di||D|∑k=1K|Dik||Di|log2|Dik||Di|
|Dik|爲子集Di中類爲Ck的個數,|Di|爲特徵A的第i種取值的個數
3.信息增益
g(D,A)=H(D)−H(D|A)
信息增益比
輸入:訓練數據集D 、特徵A
輸出:特徵A對訓練數據集D的信息增益比gR(D,A)
1.數據集D關於特徵A的值的熵HA(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(1−p)
此處是二分類情況,CART算法中會將特徵的多個取值變爲一對多的形
式變成二分類,來計算某特徵所有取值的Gini指數
2.特徵A對數據集D的基尼指數Gini(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=ai 將D 分割爲若干個非空的Di ,將Di 中樣本數最多的類作爲類別標記,構建子節點,由節點及其子節點構成樹T ,返回T ;
(5)對節點i,以Di 爲訓練集,以A−{Ag} 爲特徵集,遞歸調用(1)~(5),得到子樹Ti ,返回Ti 。
【③決策樹剪枝算法】
在瞭解決策樹剪枝算法之前,我們先來看看決策樹最顯著的缺點,那就是容易過擬合。我們可能會學習了一個很複雜的樹,它對於訓練集有很好的擬合效果,但是對於新輸入的數據來說,卻無法給出好的分類。因此,爲了讓複雜的樹簡單些,提出了剪枝算法。
這這裏先複習《統計學習方法》上給出的一種剪枝算法,即極小化決策樹整體的損失函數。
決策樹學習的損失函數
我們用|T| (樹T 的葉節點個數)來表示模型的複雜度。
經驗熵:Ht(T)=−∑kKNtkNtlog(NtkNt)
Ht(T)是指葉節點t的經驗熵,其中Nt是指葉節點t中的樣本個數,
Ntk是指這Nt個樣本中k類樣本的個數,K是指有多少類別
定義決策樹學習的損失函數爲:
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)
參考文獻:《統計學習方法》、《數據挖掘導論》