決策樹decision tree--(1)

1.決策樹

1.1.原理

決策樹很多任務是爲了數據中所蘊含的知識信息,因此決策樹可以使用不熟悉的數據集合,並從中提取出一系列規則。
郵件分類系統的例子:

在這裏插入圖片描述

在構造決策樹時,我們需要解決的第一個問題就是,當前數據集上哪個特徵在劃分數據分類時起決定性作用。爲了找到決定性的特徵,劃分出最好的結果,我們必須評估每個特徵。完成測試之後,原始數據集就被劃分爲幾個數據子集。這些數據子集會分佈在第一個決策點的所有分支上。
如果某個分支下的數據屬於同一類型,則當前無需閱讀的垃圾郵件已經正確地劃分數據分類,無需進一步對數據集進行分割。如果數據子集內的數據不屬於同一類型,則需要重複劃分數據子集的過程。如何劃分數據子集的算法和劃分原始數據集的方法相同,直到所有具有相同類型的數據均在一個數據子集內。

創建分支的僞代碼函數create Branch()如下所示:
在這裏插入圖片描述

1.2.ID3算法

每次劃分數據集時我們只選取一個特徵屬性。

例子:特徵-- 不浮出水面是否可以生存,以及是否有腳蹼,類別–魚類和非魚類
在這裏插入圖片描述
建立的決策樹如下:

在這裏插入圖片描述

1.2.1.信息增益

分數據集的大原則:將無序的數據變得更加有序。組織雜亂無章的數據的一種方法就是使用信息論度量信息。熵越高,混合的數據也越多。

熵定義爲信息的期望值,在明確這個概念之前,我們必須知道信息的定義。如果待分類的事務可能劃分在多個分類之中,則符號的信息定義爲:
l(xi)=log2p(xi)l(x_i)=-log_2p(x_i)
其中p(xi)p(x_i)是選擇該分類的概率,p(xi)=len(xi_samples)/len(all_samples)p(x_i)=len(x_i\_samples)/len(all\_samples)
xi_samplesx_i\_samples:類別爲的樣本個數。
all_samplesall\_samples:所有樣本數。
爲了計算香農熵,我們需要計算所有類別所有可能值包含的信息期望值,通過下面的公式得到:
在這裏插入圖片描述
其中n是分類的數目。

1.2.2.例子

1.2.2.1.ID3

信息熵是代表隨機變量的複雜度(不確定度),條件熵代表在某一個條件下,隨機變量的複雜度(不確定度)。而我們的信息增益恰好是:信息熵-條件熵。

(1)當前樣本集合 D 中第 k 類樣本所佔的比例爲pkp_k ,則 D 的信息熵定義爲
在這裏插入圖片描述
(2)離散屬性 a 有 V 個可能的取值 {a1,a2,…,aV};樣本集合中,屬性 a 上取值爲 av 的樣本集合,記爲 DvD^v

(3)用屬性 a 對樣本集 D 進行劃分所獲得的“信息增益”
在這裏插入圖片描述
Gain(D,a)Gain(D,a):信息增益
Ent(D)Ent(D):信息熵
條件熵
(4)信息增益表示得知屬性 a 的信息而使得樣本集合不確定度減少的程度
在決策樹算法中,我們的關鍵就是每次選擇一個特徵,特徵有多個,那麼到底按照什麼標準來選擇哪一個特徵。
這個問題就可以用信息增益來度量。如果選擇一個特徵後,信息增益最大(信息不確定性減少的程度最大),那麼我們就選取這個特徵。
選擇指標就是在所有的特徵中,選擇信息增益最大的特徵。那麼如何計算呢?看下面例子:
在這裏插入圖片描述
正例(好瓜)佔 8/17,反例佔 9/17 ,根結點的信息熵爲
在這裏插入圖片描述
計算當前屬性集合{色澤,根蒂,敲聲,紋理,臍部,觸感}中每個屬性的信息增益

色澤有3個可能的取值:{青綠,烏黑,淺白}
D1(色澤=青綠) = {1, 4, 6, 10, 13, 17},正例 3/6,反例 3/6
D2(色澤=烏黑) = {2, 3, 7, 8, 9, 15},正例 4/6,反例 2/6
D3(色澤=淺白) = {5, 11, 12, 14, 16},正例 1/5,反例 4/5

3 個分支結點的信息熵
在這裏插入圖片描述

那麼我們可以知道屬性色澤的信息增益是:
在這裏插入圖片描述

同理,我們可以求出其它屬性的信息增益,分別如下:
在這裏插入圖片描述

於是我們找到了信息增益最大的屬性紋理,它的Gain(D,紋理) = 0.381最大。
於是我們選擇的劃分屬性爲“紋理”
如下:
在這裏插入圖片描述
於是,我們可以得到了三個子結點,對於這三個子節點,我們可以遞歸的使用剛剛找信息增益最大的方法進行選擇特徵屬性,
比如:D1(紋理=清晰) = {1, 2, 3, 4, 5, 6, 8, 10, 15},第一個分支結點可用屬性集合{色澤、根蒂、敲聲、臍部、觸感},基於 D1各屬性的信息增益,分別求的如下:
在這裏插入圖片描述
於是我們可以選擇特徵屬性爲根蒂,臍部,觸感三個特徵屬性中任選一個(因爲他們三個相等並最大),其它倆個子結點同理,然後得到新一層的結點,再遞歸的由信息增益進行構建樹即可
我們最終的決策樹如下:
在這裏插入圖片描述

啊,那到這裏爲止,我們已經知道了構建樹的算法,上面也說了有了樹,我們直接遍歷決策樹就能得到我們預測樣例的類別。那麼是不是大功告成了呢?
結果是:不是的

我們從上面求解信息增益的公式中,其實可以看出,信息增益準則其實是對可取值數目較多的屬性有所偏好!
現在假如我們把數據集中的“編號”也作爲一個候選劃分屬性。我們可以算出“編號”的信息增益是0.998
因爲每一個樣本的編號都是不同的(由於編號獨特唯一,條件熵爲0了,每一個結點中只有一類,純度非常高啊),也就是說,來了一個預測樣本,你只要告訴我編號,其它特徵就沒有用了,這樣生成的決策樹顯然不具有泛化能力。

於是我們就引入了信息增益率來選擇最優劃分屬性!

1.2.2.2.C4.5算法

首先我們來看信息增益率的公式:
在這裏插入圖片描述
由上圖我們可以看出,信息增益率=信息增益/IV(a),說明信息增益率是信息增益除了一個屬性a的固有值得來的。
我們來看IV(a)的公式:
屬性a的固有值:
在這裏插入圖片描述
IV(觸感) = 0.874 ( V = 2 )
IV(色澤) = 1.580 ( V = 3 )
IV(編號) = 4.088 ( V = 17
由上面的計算例子,可以看出IV(a)其實能夠反映出,當選取該屬性,分成的V類別數越大,IV(a)就越大,如果僅僅只用信息增益來選擇屬性的話,那麼我們偏向於選擇分成子節點類別大的那個特徵。
但是在前面分析了,並不是很好,所以我們需要除以一個屬性的固定值,這個值要求隨着分成的類別數越大而越小。於是讓它做了分母。這樣可以避免信息增益的缺點。
那麼信息增益率就是完美無瑕的嗎?
當然不是,有了這個分母之後,我們可以看到增益率準則其實對可取類別數目較少的特徵有所偏好!畢竟分母越小,整體越大。
於是C4.5算法不直接選擇增益率最大的候選劃分屬性,候選劃分屬性中找出信息增益高於平均水平的屬性(這樣保證了大部分好的的特徵),再從中選擇增益率最高的(又保證了不會出現編號特徵這種極端的情況)

1.2.2.3.CART算法

CART是一課二叉樹
當CART是分類樹時,採用GINI值作爲節點分裂的依據;當CART是迴歸樹時,採用樣本的最小方差作爲節點分裂的依據;
在這裏插入圖片描述
分類樹?迴歸樹?

  • 分類樹的作用是通過一個對象的特徵來預測該對象所屬的類別,而回歸樹的目的是根據一個對象的信息預測該對象的屬性,並以數值表示。
  • CART既能是分類樹,又能是決策樹,如上表所示,如果我們想預測一個人是否已婚,那麼構建的CART將是分類樹;如果想預測一個人的年齡,那麼構建的將是迴歸樹。

假設我們構建了兩棵決策樹分別預測用戶是否已婚和實際的年齡,如圖1和圖2所示:
在這裏插入圖片描述

圖1 預測婚姻情況決策樹
圖2 預測年齡的決策樹

  • 圖1表示一棵分類樹,其葉子節點的輸出結果爲一個實際的類別,在這個例子裏是婚姻的情況(已婚或者未婚),選擇葉子節點中數量佔比最大的類別作爲輸出的類別;
  • 圖2是一棵迴歸樹,預測用戶的實際年齡,是一個具體的輸出值。怎樣得到這個輸出值?一般情況下選擇使用中值、平均值或者衆數進行表示,圖2使用節點年齡數據的平均值作爲輸出值。
    CART如何選擇分裂的屬性?

如果是分類樹,CART採用GINI值衡量節點純度如果是迴歸樹,採用樣本方差衡量節點純度。節點越不純,節點分類或者預測的效果就越差。
GINI值的計算公式:
在這裏插入圖片描述                  
節點越不純,GINI值越大。以二分類爲例,如果節點的所有數據只有一個類別,則GINI=1iIpi2=0GINI=1-\sum_{i \in I}p_i^2=0 ,如果兩類數量相同,則 GINI=1iIpi2=1/2GINI=1-\sum_{i \in I}p_i^2=1/2
迴歸方差計算公式:
在這裏插入圖片描述               
方差越大,表示該節點的數據越分散,預測的效果就越差。如果一個節點的所有數據都相同,那麼方差就爲0,此時可以很肯定得認爲該節點的輸出值;如果節點的數據相差很大,那麼輸出的值有很大的可能與實際值相差較大。
因此,無論是分類樹還是迴歸樹,CART都要選擇使子節點的GINI值或者回歸方差最小的屬性作爲分裂的方案。即最小化(分類樹):
在這裏插入圖片描述
或者(迴歸樹):
在這裏插入圖片描述
CART如何分裂成一棵二叉樹?
節點的分裂分爲兩種情況,連續型的數據和離散型的數據。
CART對連續型屬性的處理與C4.5差不多,通過最小化分裂後的GINI值或者樣本方差尋找最優分割點,將節點一分爲二,在這裏不再敘述,詳細請看C4.5。
對於離散型屬性,理論上有多少個離散值就應該分裂成多少個節點。但CART是一棵二叉樹,每一次分裂只會產生兩個節點,怎麼辦呢?很簡單,只要將其中一個離散值獨立作爲一個節點,其他的離散值生成另外一個節點即可。這種分裂方案有多少個離散值就有多少種劃分的方法,舉一個簡單的例子:如果某離散屬性一個有三個離散值X,Y,Z,則該屬性的分裂方法有{X}、{Y,Z},{Y}、{X,Z},{Z}、{X,Y},分別計算每種劃分方法的基尼值或者樣本方差確定最優的方法。
以屬性“職業”爲例,一共有三個離散值,“學生”、“老師”、“上班族”。該屬性有三種劃分的方案,分別爲{“學生”}、{“老師”、“上班族”},{“老師”}、{“學生”、“上班族”},{“上班族”}、{“學生”、“老師”},分別計算三種劃分方案的子節點GINI值或者樣本方差,選擇最優的劃分方法,如下圖所示:
第一種劃分方法:{“學生”}、{“老師”、“上班族”}
在這裏插入圖片描述
預測是否已婚(分類):
在這裏插入圖片描述

預測年齡(迴歸):
在這裏插入圖片描述

第二種劃分方法:{“老師”}、{“學生”、“上班族”}
在這裏插入圖片描述
預測是否已婚(分類):
在這裏插入圖片描述
預測年齡(迴歸):
在這裏插入圖片描述     
第三種劃分方法:{“上班族”}、{“學生”、“老師”}
在這裏插入圖片描述
預測是否已婚(分類):
在這裏插入圖片描述
預測年齡(迴歸):
在這裏插入圖片描述     
綜上,如果想預測是否已婚,則選擇{“上班族”}、{“學生”、“老師”}的劃分方法,如果想預測年齡,則選擇{“老師”}、{“學生”、“上班族”}的劃分方法。

1.2.2.4.如何剪枝?

CART採用CCP(代價複雜度)剪枝方法。代價複雜度選擇節點表面誤差率增益值最小的非葉子節點,刪除該非葉子節點的左右子節點,若有多個非葉子節點的表面誤差率增益值相同小,則選擇非葉子節點中子節點數最多的非葉子節點進行剪枝。
可描述如下:
令決策樹的非葉子節點爲T1,T2,...,TnT_1,T_2,...,T_n
a)計算所有非葉子節點的表面誤差率增益值KaTeX parse error: Undefined control sequence: \alpah at position 33: …1,\alpha_2,...,\̲a̲l̲p̲a̲h̲_n \}
b)選擇表面誤差率增益值αi\alpha_i最小的非葉子節點TiT_i(若多個非葉子節點具有相同小的表面誤差率增益值,選擇節點數最多的非葉子節點)。
c)對TiT_i進行剪枝
表面誤差率增益值的計算公式:
在這裏插入圖片描述                              
其中:
R(t)R(t)表示葉子節點的誤差代價,R(t)=r(t)p(t)R(t)=r(t)*p(t)
r(t)r(t) 爲節點的錯誤率,
p(t)p(t)爲節點數據量的佔比;
R(T)R(T)表示子樹的誤差代價,
在這裏插入圖片描述
ri(t)r_i(t)爲子節點i的錯誤率,
pi(t)p_i(t) 表示節點i的數據節點佔比;
N(T)N(T)表示子樹節點個數。
算例:
下圖是其中一顆子樹,設決策樹的總數據量爲40。
在這裏插入圖片描述
該子樹的表面誤差率增益值可以計算如下:
在這裏插入圖片描述
求出該子樹的表面錯誤覆蓋率爲 ,只要求出其他子樹的表面誤差率增益值就可以對決策樹進行剪枝。
流程圖:
在這裏插入圖片描述
總結:

  • (1)CART是一棵二叉樹,每一次分裂會產生兩個子節點,對於連續性的數據,直接採用與C4.5相似的處理方法,對於離散型數據,選擇最優的兩種離散值組合方法。
  • (2)CART既能是分類數,又能是二叉樹。如果是分類樹,將選擇能夠最小化分裂後節點GINI值的分裂屬性;如果是迴歸樹,選擇能夠最小化兩個節點樣本方差的分裂屬性。
  • (3)CART跟C4.5一樣,需要進行剪枝,採用CCP(代價複雜度的剪枝方法)。

1.3.優缺點

1.3.1.ID3

  • (1)ID3沒有考慮連續特徵,比如長度,密度都是連續值,無法在ID3運用。這大大限制了ID3的用途;

  • (2)ID3採用信息增益大的特徵優先建立決策樹的節點。缺點是在相同條件下,取值比較多的特徵比取值少的特徵信息增益大。比如一個變量有2個值,各爲1/2,另一個變量爲3個值,各爲1/3,其實他們都是完全不確定的變量,但是取3個值的比取2個值的信息增益大;

  • (3)ID3算法對於缺失值的情況沒有做考慮;

  • (4)沒有考慮過擬合的問題。

1.3.2.C4.5

(1)C4.5引入了正則化係數進行初步的剪枝,但是剪枝的效果不夠好;

(2)C4.5生成的是多叉樹(ID3算法生成的也是多叉樹),即一個父節點可以有多個子節點。很多時候,在計算機中二叉樹模型會比多叉樹運算效率高。如果採用二叉樹,可以提高效率;

(3)C4.5只能用於分類,不能應用於迴歸,這也大大的限制了它的用途;

(4)C4.5由於使用了熵模型,裏面有大量的耗時的對數運算,如果是連續值還有大量的排序運算。如果能夠加以模型簡化可以減少運算強度但又不犧牲太多準確性的話,那就更好了。
1.3.3.CART
(1)決策樹很容易理解和解釋,而且決策樹也容易可視化(在sklearn中可以使用export_graphviz包進行決策樹可視化);

(2)基本不需要預處理,不需要提前歸一化,處理缺失值;

(3)決策樹在預測時的時間代價是O(logN),其中N是預測的樣本集大小;

(4)能夠處理數值型(連續型)和類別型(離散型)的數據。很多其他技術通常在分析數據集的時候只專注於其中一點,即要麼是數值型,要麼是類別型;

(5)能夠處理多維度輸出的分類問題,即我們的預測值有多個維度,且多維度是相關的;

(6)決策樹使用是作爲一個白盒,相較於黑盒的神經網絡,決策樹在邏輯上可以得到很好的解釋;

(7)可以交叉驗證的剪枝來選擇模型,從而提高泛化能力;

(8)對異常點的容錯能力好,健壯性強。

缺點:
(1)決策樹容易過擬合,導致模型的泛化能力很差。可以通過剪枝(目前sklearn中的決策樹不支持剪枝,所以需要我們自己設置,如葉節點最小值,樹的最大深度等),設置每個葉子節點的最小樣本數和樹的最大深度來避免這個問題;

(2)決策樹不穩定,一些很小的變化可能會導致完全不同的決策樹生成。這個問題可以通過集成方法來緩解(如:隨機森林);

(3)學習一棵最優化的決策樹是NPC問題,因此實際中的決策樹學習算法是基於啓發式的算法,例如貪心算法在局部做到最優化決策樹的每個節點,這樣的方法並不能保證能得到一個全局最優的決策樹。這個問題可以通過集成的方法來得到改善;

(4)一些複雜的關係決策樹很難去學,因爲決策樹並不能清楚的表達它們,比如,異或問題,多路複用問題等。一般這種關係可以換神經網絡分類方法來解決;

(5)如果某些類別的樣本比例過大,生成決策樹容易偏向於這些類別。因此建議在創建決策樹之前要平衡數據集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章