機器學習-第四章 決策樹

4.1 基本流程

1.決策樹的基本結構

1)根結點:相當于樹的根
2)內部結點(決策結點):相當于樹的枝干
3)葉結點 (結果結點):相當于樹的葉子

決策樹基本結構

2.決策樹的基本流程

決策樹的基本流程基于決策樹的結構來進行的,遵循”分而冶之“的策略,其流程如下所示。設我們訓練集為D,有m個樣本,每個樣本的屬性有d個,構成屬性集A。

決策樹流程

實際上,決策樹的流程是一個遞歸的過程,而遞歸需要遞歸出口(讓遞歸結束)。決策樹的流程有三個遞歸出口

  • 當前結點包含的樣本全屬于同一類別,無需劃分
    (樣本為同一類別,沒有需要劃分的屬性了)

    遞歸出口1

  • 當前結點包含的樣本集合為空,不能劃分
    (沒有該屬性取值下的樣本)

    遞歸出口2

  • 當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分
    (屬性集為空或者有屬性但是全部樣本屬性值一樣無需劃分)
    (屬性用完了)

    遞歸出口3

舉例:
我們要用決策樹判斷好人還是壞人。樣本集D為100個人,100人里面有30個好人、70個壞人。屬性集A為{性別,年齡段,地方},取值分別為(男,女)、(青年、中年、老年)、(北京、上海)。
遞歸出口1:當前結點包含的樣本全屬于同一類別,無需劃分
假設第一次劃分是根據(jù)性別劃分,然后有50個男人50個女人。我們發(fā)現(xiàn),男人這個子節(jié)點50個全是壞人,畢竟男人都是大豬蹄子。這50個壞男人里面,有青年有中年也有老年,有北京的也有深圳的,但無所謂了,沒必要再繼續(xù)劃分。這就是第一個終止條件

遞歸出口1

遞歸出口2:當前結點包含的樣本集合為空,不能劃分
對女人,我們還要繼續(xù)考察,假設接下來我們是按照年齡段劃分的子節(jié)點,然后我們發(fā)現(xiàn),老年這個子節(jié)點里一個樣本都沒有。這肯定是沒辦法繼續(xù)劃分了。問題是,那么我們如何歸類這個子節(jié)點呢?如果來了一個“老女人”讓我們判斷,該判斷為好人還是壞人呢?答案是利用父節(jié)點來判斷,老女人這個子節(jié)點為空,但是它的父節(jié)點是30個好人20個壞人。我們無法判斷一個老女人的好壞,但是既然一個女人有60%的可能性是好人,那么我們就也把老女人判斷為好人吧!這就叫先驗概率。
該節(jié)點已經沒有樣本了自然不能再劃分了。依據(jù)父節(jié)點的情況給該節(jié)點歸類。

遞歸出口3:屬性用完了
沒有屬性了
按照地域劃分完后,有些節(jié)點已經完全是好人或完全時壞人了,但也有些節(jié)點不是這樣,如紅框標注。那也不能繼續(xù)劃分了,因為沒有特征可用了。任何一個節(jié)點,其性別、年齡段、地域三個特征的屬性都是固定了,沒有辦法再拆解成更小的節(jié)點。

例子來源:http://www.itdecent.cn/p/d153130b813f

4.2 劃分選擇

1.決策樹關鍵

從決策樹的流程可以看出,關鍵在于第8行,如何選擇最有劃分屬性,即根結點。

如何選擇最優(yōu)屬性
我們通常希望,決策樹的分支結點所包含的樣本盡可能屬于同一類別,即"純度"要高。

2.選擇根結點的依據(jù)

  • 信息增益
    y是類別,如。
    k是樣本屬于第k類,k取1、2、3……y,如第1類是好第2類是壞
    設pk是樣本集合D中第k類樣本數(shù)目的占比。即第k類樣本數(shù)目/m個樣本

1) 信息熵(Ent):度量樣本集合純度的指標。數(shù)據(jù)集D的Ent為

信息熵(Ent)
如:一個數(shù)據(jù)集30個樣本,15個是好的,15個是壞的,那么這個數(shù)據(jù)集的Ent=-((15/30) * log2(15/30) + (15/30) * log2(15/30))=1
Ent的值越小,則D的純度越高。

設屬性集A,包括多個屬性,對離散屬性a的取值可能有V個,(av1,av2,av3,……,av),用a來對D進行劃分,則會產生V個分支結點。其中Dv表示,屬性a下取值為av的樣本。如,有15個西瓜,有三種屬性,其中屬性a是"色澤",取值{1青綠,2淺白,3烏黑},其中取值青綠的有D1=6,取值淺白的有D2=6,取值烏黑的有D3=3。

每個分支結點的權重為:|Dv| / |D|,樣本數(shù)越多的分支結點影響越大。
Dv的信息熵為:Ent(Dv),即關鍵求在在Dv里,有多少樣本是屬于第k類的占比。如,上面D1=6,其中2例是好瓜,4例是壞瓜。那么
Ent(D1) = -((2/6) * log2(2/6) + (4/6) * log2(4/6))

2) 信息增益
通過上面的鋪墊后,我們可以給出用屬性a對D進行劃分所獲得的"信息增益"公式:

信息增益

信息增益越大,則意味著使用屬性a來進行劃分所獲得的"純
度提升"越大,
故我們可以使用信息增益來進行決策樹的劃分選擇。
舉例:
數(shù)據(jù)集D

色澤的信息增益
按照上面的步驟,可以得出其他屬性的信息增益
其他屬性的信息增益
可知、屬性"紋理"的信息增益最大,故選其作為劃分屬性(根結點),基于"紋理"對根結點劃分的結果如下。
第一次劃分結果
接著,進行第二次劃分,在剩下的屬性中繼續(xù)重復求最大信息增益畫出分支的操作。最終得到最后的決策樹。
重復操作.png

3)求信息增益及畫出決策樹的步驟
① 求數(shù)據(jù)集D的信息熵Ent(D)
② 選擇一個屬性a,找出每個取值所在的樣本數(shù)目,然后求占D的比例,即權重Dv/D。
③ 求每個取值的信息熵Ent(Dv)。
④ 重復上面步驟,求出其他屬性的信息增益。
⑤ 選擇最大信息增益,然后畫出根結點的結果,然后重復上述步驟,直到得到決策樹。

下面這個鏈接有相關的代碼和解釋
http://www.itdecent.cn/p/14a9e8d1f2a3

  • 增益率
    1)屬性a的"固有值"

    固有值
    屬性a的可能取值數(shù)目越多,固有值通常越大。

    固有值看起來很像信息熵,以下是它們的區(qū)別
    固有值與信息熵的區(qū)別

2)增益率

增益率

3)增益率準則與信息增益準則的區(qū)別
信息增益準則:選擇信息增益大的。但是信息增益準則對可取值數(shù)目較多的屬性有所偏好。易導致泛化能力差。

增益率準則:選擇增益率大的。但是增益率準則對可取值數(shù)目較少的屬性有所偏好。

因此,C4.5決策樹算法,結合了兩個指標,使用了啟發(fā)式
先從候選劃分屬性中找出信息增益高于平均水平的屬性,再從中選擇增益率最高的。

  • 基尼系數(shù)(CART決策樹算法使用的度量)
    1)基尼值

    基尼值,k指類別
    含義:從數(shù)據(jù)集中隨機抽取兩個樣本,其類別不同的概率。基尼值越小,數(shù)據(jù)集D純度越高。

    2)基尼系數(shù)

    基尼系數(shù)

    3)準則
    在屬性集A中,選擇那個基尼系數(shù)最小的屬性作為最有劃分屬性。

4.3 剪枝處理

1. 剪枝作用

防止決策樹學習算法出現(xiàn)"過擬合"的問題。

2. 剪枝處理的基本策略

設有數(shù)據(jù)集D,劃分為訓練集和測試集。
數(shù)據(jù)集D

1)預剪枝:要對劃分前后泛化性能進行評估。對比決策樹某節(jié)點生成前與生成后的泛化性能。有所提升就停止剪去該分支。

下面由例子來說明預剪枝。
基于信息增益原則,屬性"臍部"的最大,選擇"臍部"作為最優(yōu)劃分屬性,問題來了,是否應該進行劃分呢?預剪枝要通過比較劃分前后,泛化性能的大小來估計。

① 未劃分前,根據(jù)訓練集,類別標記為訓練樣例數(shù)最多的類別。這里選擇"好瓜"。
當所有節(jié)點集中在根節(jié)點,所有訓練集屬于標記類別的僅有{4,5,8},因此分類正確的是3/7 * 100%=42.9%。

編號 好瓜
4
5
8
9
11
12
13
3/7 = 42.9%

② 按照最優(yōu)屬性"臍部"劃分后,在訓練集中,凹陷特征好瓜的占例比凹陷特征為壞瓜的大,因此凹陷劃分為好瓜,稍凹特征好瓜的占比多,因此將其標記為好瓜。故有
劃分后

且可以看出,測試集中分類正確的結果為5/7 = 71.4%

編號 按臍部劃分分類正確的
4(凹陷) 分類正確
5(凹陷) 分類正確
8(稍凹) 分類正確
9(稍凹) 分類錯誤
11(平坦) 分類正確
12(平坦) 分類正確
13(凹陷) 分類錯誤
5/7 = 71.4%

劃分前和劃分后,測試集分類正確的精度從42.9%上升到71.4%,因此預剪枝策略讓"臍部"屬性進行劃分,即不剪掉這個分支。

接著繼續(xù)進一步計算凹陷、根蒂特征下,其他屬性的信息增益,按照最大信息增益準則選擇最優(yōu)屬性劃分"色澤"。
對于凹陷來說
對于稍凹來說

對于凹陷結點,進一步按照色澤進行劃分后,對比劃分前后的準確性:

編號 按照臍部劃分 對凹陷,按照色澤劃分
4(凹陷、青綠) 分類正確 分類正確
5(凹陷、淺白) 分類正確 分類錯誤
8(稍凹) 分類正確 分類正確
9(稍凹) 分類錯誤 分類錯誤
11(平坦) 分類正確 分類正確
12(平坦) 分類正確 分類正確
13(凹陷、青綠) 分類錯誤 分類錯誤
正確率 5/7(劃分前) 4/7(劃分后,精度降低)

劃分后,精度下降,因此不讓"色澤"進行劃分。

接著就是對于稍凹進行上述的操作,最優(yōu)劃分屬性為"根蒂",但是劃分后的精度沒有變化,因此預剪枝測率也不讓"根蒂"進行劃分,即剪掉"根蒂"結點產生的枝干。

最后產生預剪枝下的決策樹
預剪枝決策樹

預剪枝決策樹中很多分支沒有展開,這不僅降低了過擬合的風險,還顯著減少了決策樹的訓練時間開銷和測試時間。但是,有些分支雖當前不能提升泛化性。甚至可能導致泛化性暫時降低,但在其基礎上進行后續(xù)劃分卻有可能導致顯著提高,因此預剪枝給決策樹帶來了欠擬合的風險。

2)后剪枝:先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點(結果結點)能帶來決策樹泛化性能提升,則將該子樹換成葉結點。
完整的決策樹

完整決策樹
剪枝前:測試集精度為42.9%。

剪枝后:后剪枝從最底部開始剪枝,先看最底部的屬性"紋理",將其剪掉,即結點6替換成結果結點(葉結點),剪掉的結點中包括{7,15}兩個訓練樣本,則剪枝后的決策樹為

剪枝后的決策樹
剪掉結點6的劃分后,精度從3/7上升到4/7,故可以剪掉結點6。

接著往上剪結點5,即結點5替換為葉結點,包含的樣本號為{6,7,15},好瓜(2個)多于壞瓜(1個),因此選擇好瓜進行標記,剪枝后的決策樹為:

第二次剪枝
此時剪掉結點5的劃分后,精度沒有提升,因此不用剪掉結點5。
然后對結點②、結點③和結點①逐個進行考察(結點④不用是因為達到了遞歸出口1的條件),最后結點②剪掉,結點③和①保留,產生最終的后剪枝決策樹。
后剪枝決策樹

對比預剪枝與后剪枝生成的決策樹,可以看出
后剪枝通常比預剪枝保留更多的分支,其欠擬合風險很小,因此后剪枝的泛化性能往往優(yōu)于預剪枝決策樹。但后剪枝過程是從底往上裁剪,因此其訓練時間開銷比前剪枝要大

4.4 連續(xù)值與缺失值

1.連續(xù)值處理

現(xiàn)實學習任務中,我們會遇到連續(xù)屬性,它們的取值無限,因此需要進行離散化。
策略:二分法
給定數(shù)據(jù)集D,有連續(xù)屬性a,假定a在D上出現(xiàn)了n個不同的取值,將這些連續(xù)值從小到大排序,記{a1,a2,a3,……,an}。
再設置一個劃分點t,劃分點將數(shù)據(jù)集D分為Dt+Dt-,劃分點t由連續(xù)屬性的信息增益決定。
Dt-:包含了連續(xù)屬性a取值小于t的樣本。
Dt+:包含了連續(xù)屬性a取值大于等于t的樣本。
對相鄰的連續(xù)屬性取值aiai+1來說,t在它們的區(qū)間之內中取任意值產生的劃分結果相同,所以我們可以產生n-1個候選劃分點。可以考慮取中點,則有候選劃分點集合,

取中點,產生候選劃分點集合
如圖所示
接下來就是選取最優(yōu)劃分點,用信息增益來考量,選擇最大的信息增益,公式如下
對每一個劃分點進行嘗試,找出令信息增益最大的那個劃分點
舉例,有數(shù)據(jù)集D如下
數(shù)據(jù)集D
一共有17個樣本,對于連續(xù)屬性"密度",有16個候選劃分點,如下
候選劃分點集合
接著對每一個候選劃分點進行嘗試,代入上述公式,由于計算復雜,文中給出了答案
最大信息增益是0.262,劃分點是0.381
我們可以驗證這個結論,設最大劃分點為0.381,然后代入公式,有
Ent(D)
公式第二項
結果
由此可見,0.381的信息增益為0.262,驗證正確。0.262為最大增益,則選擇0.381作為最優(yōu)劃分點。
對于含糖率也是一樣的操作,得到
含糖率的最優(yōu)劃分點
且其他屬性的增益也有
所有屬性的信息增益,紋理最大
最終的決策樹
注意,若當前結點劃分屬性為連續(xù)屬性,該屬性還可以作為其后代結點的劃分屬性。如圖

2.缺失值處理

在現(xiàn)實中,會經常遇見不完整的樣本,即樣本的某些屬性值缺失。

屬性值缺失
對于上述數(shù)據(jù),如果去掉缺失屬性值的樣本,那么我們只有4個完整樣本可以用,顯然是不夠的。這時我們要考慮如何利用缺失樣本進行學習。
我們需要解決兩個問題:

  • 如何在屬性值缺失的情況下進行劃分屬性選擇?
  • 給定劃分屬性,若樣本在該屬性上的值缺失,如何對樣本進行劃分?

設數(shù)據(jù)集D和屬性a,a有V個取值{a1,a2,……,aV}
設D~表示D中在屬性a上無缺失值的樣本子集。如屬性a為"色澤",則無缺失樣本為 {2,3,4,6,7,8,9,10,11,12,14,15,16,17},14個
設D~v表示D~中在屬性a上取值為av的樣本子集。如色澤取值{青綠1,烏黑2,淺白3},D~1 = {4,6,10,17};D~2 = {2,3,7,8,9,15};D~3 = {11,12,14,16}
設D~k表示D~中屬于第k類(k∈1,2,……)的樣本子集。如,西瓜有好瓜和壞瓜,k = 1(好瓜),2(壞瓜),
則D~1={2,3,4,6,7,8};D~2={9,10,11,12,14,15,16,17}
假定我們?yōu)槊總€樣本x賦一個權重wx(一開始都為1),且定義


含義:對屬性a,
ρ表示無缺失樣本占全部樣本的比值;
p~k表示無缺失樣本中第k類樣本的占比;
r~v表示無缺失樣本中,取值為v的樣本的占比。
∑p~k=1;∑r~v=1。

對問題一,我們可以用D~來判斷屬性a的優(yōu)劣
我們可以將信息增益改寫為

信息增益

接著對問題二
若x在劃分屬性a上的取值已知,則將x劃入與其取值對應的子結點,且權重依舊為wx
若x在劃分屬性a上的取值未知,則將x同時劃入所有子結點,且權重變?yōu)?strong>原來的權重乘上與對應結點的屬性值的樣本在D~中的占比,即r~v * wx,就是讓同一個樣本以不同的概率劃入到不同的子結點中去。

從問題一到問題二的舉例
一開始
對于問題一
對于問題一
其他屬性的信息增益
對于問題二中的缺失值
問題二的圖解

然后就是不斷按照上述步驟劃分結點,進行遞歸直到到大遞歸出口,最終得到
最終決策樹

4.5 多變量決策樹

在第一章中,我們知道了屬性空間,就是每個屬性都可以看成一個坐標軸,這樣d個屬性就形成了d維空間,而樣本就是d維空間里面的一個點。樣本分類就是在這個d維空間中,尋找它們的分類邊界。

數(shù)據(jù)集
經過處理得到決策樹
決策樹
尋找分類邊界
分類邊界由若干個與軸平行的直線構成
分類邊界的每一段都是與坐標軸平行的,這樣的邊界是理想的,因為每一段都對應了一個屬性值。但實際上,真實的分類邊界是比較復雜的,必須使用很多段才能更好的近似。如圖所示,
多段的分類邊界

由于開銷過大,因此我們考慮使用斜的劃分邊界,如圖
斜線劃分邊界
多變量決策樹就是解決這種分類邊界優(yōu)化的問題,甚至可以用曲線來畫出分類邊界。使用斜的劃分邊界,則能簡化決策樹。每個結點是屬性的線性組合,而不只是對某個屬性。
多變量決策樹不再是為每個非葉結點尋找最有劃分屬性,而是建立一個合適的線性分類器。如對上圖的數(shù)據(jù)集D建立線性分類器。
線性分類器
得到的分類邊界如下
多變量決策樹對應的分類邊界

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容