1.決策樹的定義算法
樹想必你們都會比較熟悉,是由節點和邊兩種元素組成的結構。理解樹,就須要理解幾個關鍵詞:根節點、父節點、子節點和葉子節點。優化
父節點和子節點是相對的,說白了子節點由父節點根據某一規則分裂而來,而後子節點做爲新的父親節點繼續分裂,直至不能分裂爲止。而根節點是沒有父節點的節點,即初始分裂節點,葉子節點是沒有子節點的節點,以下圖所示:spa
圖1.1 樹的結構示意圖3d
決策樹利用如上圖所示的樹結構進行決策,每個非葉子節點是一個判斷條件,每個葉子節點是結論。從跟節點開始,通過屢次判斷得出結論。blog
2. 決策樹如何作決策排序
從一個分類例子提及:ci
銀行但願可以經過一我的的信息(包括職業、年齡、收入、學歷)去判斷他是否有貸款的意向,從而更有針對性地完成工做。下表是銀行如今可以掌握的信息,咱們的目標是經過對下面的數據進行分析創建一個預測用戶貸款一下的模型。io
表2.1 銀行用戶信息表table
職業基礎 |
年齡 |
收入 |
學歷 |
是否貸款 |
自由職業 |
28 |
5000 |
高中 |
是 |
工人 |
36 |
5500 |
高中 |
否 |
工人 |
42 |
2800 |
初中 |
是 |
白領 |
45 |
3300 |
小學 |
是 |
白領 |
25 |
10000 |
本科 |
是 |
白領 |
32 |
8000 |
碩士 |
否 |
白領 |
28 |
13000 |
博士 |
是 |
自由職業 |
21 |
4000 |
本科 |
否 |
自由職業 |
22 |
3200 |
小學 |
否 |
工人 |
33 |
3000 |
高中 |
否 |
工人 |
48 |
4200 |
小學 |
否 |
(注:上表中的數據都由本人捏造,不具備任何實際的意義)
上邊中有4個客戶的屬性,如何綜合利用這些屬性去判斷用戶的貸款意向?決策樹的作法是每次選擇一個屬性進行判斷,若是不能得出結論,繼續選擇其餘屬性進行判斷,直到可以「確定地」判斷出用戶的類型或者是上述屬性都已經使用完畢。好比說咱們要判斷一個客戶的貸款意向,咱們能夠先根據客戶的職業進行判斷,若是不能得出結論,再根據年齡做判斷,這樣以此類推,直到能夠得出結論爲止。
決策樹用樹結構實現上述的判斷流程,如圖2.1所示:
圖2.1 銀行貸款意向分析決策樹示意圖
經過圖2.1的訓練數據,咱們可以建議圖2.1所示的決策樹,其輸入是用戶的信息,輸出是用戶的貸款意向。若是要判斷某一客戶是否有貸款的意向,直接根據用戶的職業、收入、年齡以及學歷就能夠分析得出用戶的類型。如某客戶的信息爲:{職業、年齡,收入,學歷}={工人、39, 1800,小學},將信息輸入上述決策樹,能夠獲得下列的分析步驟和結論。
第一步:根據該客戶的職業進行判斷,選擇「工人」分支;
第二步:根據客戶的年齡進行選擇,選擇年齡」<=40」這一分支;
第三步:根據客戶的學歷進行選擇,選擇」小學」這一分支,得出該客戶無貸款意向的結論。
3. 決策樹的構建
那麼問題就來了,如何構建如圖2.1所示一棵決策樹呢?決策樹的構建是數據逐步分裂的過程,構建的步驟以下:
步驟1:將全部的數據當作是一個節點,進入步驟2;
步驟2:從全部的數據特徵中挑選一個數據特徵對節點進行分割,進入步驟3;
步驟3:生成若干孩子節點,對每個孩子節點進行判斷,若是知足中止分裂的條件,進入步驟4;不然,進入步驟2;
步驟4:設置該節點是子節點,其輸出的結果爲該節點數量佔比最大的類別。
從上述步驟能夠看出,決策生成過程當中有兩個重要的問題:
(1)數據如何分割
(2)如何選擇分裂的屬性
(3)何時中止分裂
3.1 數據分割
假如咱們已經選擇了一個分裂的屬性,那怎樣對數據進行分裂呢?
分裂屬性的數據類型分爲離散型和連續性兩種狀況,對於離散型的數據,按照屬性值進行分裂,每一個屬性值對應一個分裂節點;對於連續性屬性,通常性的作法是對數據按照該屬性進行排序,再將數據分紅若干區間,如[0,10]、[10,20]、[20,30]…,一個區間對應一個節點,若數據的屬性值落入某一區間則該數據就屬於其對應的節點。
例:
表3.1 分類信息表
職業 |
年齡 |
是否貸款 |
白領 |
30 |
否 |
工人 |
40 |
否 |
工人 |
20 |
否 |
學生 |
15 |
否 |
學生 |
18 |
是 |
白領 |
42 |
是 |
(1)屬性1「職業」是離散型變量,有三個取值,分別爲白領、工人和學生,根據三個取值對原始的數據進行分割,以下表所示:
表3.2 屬性1數據分割表
取值 |
貸款 |
不貸款 |
白領 |
1 |
1 |
工人 |
0 |
2 |
學生 |
1 |
1 |
表3.2能夠表示成以下的決策樹結構:
(2)屬性2是連續性變量,這裏將數據分紅三個區間,分別是[10,20]、[20,30]、[30,40],則每個區間的分裂結果以下:
表3.3 屬性2數據分割表
區間 |
貸款 |
不貸款 |
[0,20] |
1 |
2 |
(20,40] |
0 |
2 |
(40,—] |
1 |
0 |
表3.3能夠表示成以下的決策樹結構:
3.2 分裂屬性的選擇
咱們知道了分裂屬性是如何對數據進行分割的,那麼咱們怎樣選擇分裂的屬性呢?
決策樹採用貪婪思想進行分裂,即選擇能夠獲得最優分裂結果的屬性進行分裂。那麼怎樣纔算是最優的分裂結果?最理想的狀況固然是能找到一個屬性恰好可以將不一樣類別分開,可是大多數狀況下分裂很難一步到位,咱們但願每一次分裂以後孩子節點的數據儘可能」純」,如下圖爲例:
從圖3.1和圖3.2能夠明顯看出,屬性2分裂後的孩子節點比屬性1分裂後的孩子節點更純:屬性1分裂後每一個節點的兩類的數量仍是相同,跟根節點的分類結果相比徹底沒有提升;按照屬性2分裂後每一個節點各種的數量相差比較大,能夠很大機率認爲第一個孩子節點的輸出結果爲類1,第2個孩子節點的輸出結果爲2。
選擇分裂屬性是要找出可以使全部孩子節點數據最純的屬性,決策樹使用信息增益或者信息增益率做爲選擇屬性的依據。
(1)信息增益
用信息增益表示分裂先後跟的數據複雜度和分裂節點數據複雜度的變化值,計算公式表示爲:
其中Gain表示節點的複雜度,Gain越高,說明覆雜度越高。信息增益說白了就是分裂前的數據複雜度減去孩子節點的數據複雜度的和,信息增益越大,分裂後的複雜度減少得越多,分類的效果越明顯。
節點的複雜度能夠用如下兩種不一樣的計算方式:
a)熵
熵描述了數據的混亂程度,熵越大,混亂程度越高,也就是純度越低;反之,熵越小,混亂程度越低,純度越高。 熵的計算公式以下所示:
其中Pi表示類i的數量佔比。以二分類問題爲例,若是兩類的數量相同,此時分類節點的純度最低,熵等於1;若是節點的數據屬於同一類時,此時節點的純度最高,熵 等於0。
b)基尼值
基尼值計算公式以下:
其中Pi表示類i的數量佔比。其一樣以上述熵的二分類例子爲例,當兩類數量相等時,基尼值等於0.5 ;當節點數據屬於同一類時,基尼值等於0 。基尼值越大,數據越不純。
例:
以熵做爲節點複雜度的統計量,分別求出下面例子的信息增益,圖3.1表示節點選擇屬性1進行分裂的結果,圖3.2表示節點選擇屬性2進行分裂的結果,經過計算兩個屬性分裂後的信息增益,選擇最優的分裂屬性。
屬性1:
屬性2:
因爲 ,因此屬性1與屬性2相比是更優的分裂屬性,故選擇屬性1做爲分裂的屬性。
(2)信息增益率
使用信息增益做爲選擇分裂的條件有一個不可避免的缺點:傾向選擇分支比較多的屬性進行分裂。爲了解決這個問題,引入了信息增益率這個概念。信息增益率是在信息增益的基礎上除以分裂節點數據量的信息增益(聽起來很拗口),其計算公式以下:
其中 表示信息增益, 表示分裂子節點數據量的信息增益,其計算公式爲:
其中m表示子節點的數量,表示第i個子節點的數據量,N表示父節點數據量,說白了, 其實是分裂節點的熵,若是節點的數據鏈越接近,越大,若是子節點越大,越大,而就會越小,可以下降節點分裂時選擇子節點多的分裂屬性的傾向性。信息增益率越高,說明分裂的效果越好。
仍是信息增益中說起的例子爲例:
屬性1的信息增益率:
屬性2的信息增益率:
因爲 ,故選擇屬性2做爲分裂的屬性。
3.3 中止分裂的條件
決策樹不可能不限制地生長,總有中止分裂的時候,最極端的狀況是當節點分裂到只剩下一個數據點時自動結束分裂,但這種狀況下樹過於複雜,並且預測的經度不高。通常狀況下爲了下降決策樹複雜度和提升預測的經度,會適當提早終止節點的分裂。
如下是決策樹節點中止分裂的通常性條件:
(1)最小節點數
當節點的數據量小於一個指定的數量時,不繼續分裂。兩個緣由:一是數據量較少時,再作分裂容易強化噪聲數據的做用;二是下降樹生長的複雜性。提早結束分裂必定程度上有利於下降過擬合的影響。
(2)熵或者基尼值小於閥值。
由上述可知,熵和基尼值的大小表示數據的複雜程度,當熵或者基尼值太小時,表示數據的純度比較大,若是熵或者基尼值小於必定程度數,節點中止分裂。
(3)決策樹的深度達到指定的條件
節點的深度能夠理解爲節點與決策樹跟節點的距離,如根節點的子節點的深度爲1,由於這些節點與跟節點的距離爲1,子節點的深度要比父節點的深度大1。決策樹的深度是全部葉子節點的最大深度,當深度到達指定的上限大小時,中止分裂。
(4)全部特徵已經使用完畢,不能繼續進行分裂。
被動式中止分裂的條件,當已經沒有可分的屬性時,直接將當前節點設置爲葉子節點。
3.4 決策樹的構建方法
根據決策樹的輸出結果,決策樹能夠分爲分類樹和迴歸樹,分類樹輸出的結果爲具體的類別,而回歸樹輸出的結果爲一個肯定的數值。
決策樹的構建算法主要有ID三、C4.五、CART三種,其中ID3和C4.5是分類樹,CART是分類迴歸樹,將在本系列的ID3、C4.5和CART中分別講述。
其中ID3是決策樹最基本的構建算法,而C4.5和CART是在ID3的基礎上進行優化的算法。
4. 決策樹的優化
一棵過於複雜的決策樹極可能出現過擬合的狀況,若是徹底按照3中生成一個完整的決策樹可能會出現預測不許確的狀況,所以須要對決策樹進行優化,優化的方法主要有兩種,一是剪枝,二是組合樹,將在本系列的剪枝和組合樹中分別講述。