第二十四節決策樹系列之分裂流程和Gini係數評估(3)
算法
上一節中咱們講解了決策樹的數學表達形式,本節的話咱們講解決策樹的分裂流程以及分裂條件的評估。咱們基於決策樹的遞歸表達式上:app
就能夠知道訓練一顆決策樹須要哪些條件?臺灣大學林軒田教授給咱們一個總結。工具
因此決策樹從迭代考慮分裂的話咱們須要4個條件: 一、分支個數(number of branches)即每次分裂要分紅幾支。 二、分支條件(branching criteria),當前分支判斷的條件。 三、終止條件(termination criteria),不可能一直分下去,要有個終止條件。 四、基本算法(base hypothesis),葉子結點到底如何表達。四個問題搞明白了,如何獲得一棵決策樹咱們就明白了。學習
咱們的目標是經過大量的數據生成一棵很是好的樹,用這棵樹來預測新來的數據。好就是必定要能反映客觀規律,在大數定理的理論支持下,若是收集的訓練集足夠龐大,訓練集就必定程度上可以反映客觀規律。而後咱們用生成好的樹來預測新來的數據,舉個例子來解釋下如何生成決策樹的4個條件?假如訓練集上有100條數據,首先全部的數據都在根節點裏面出現。咱們要給它分到各個子樹裏面,那麼每次分裂要分紅幾份?這是第一個問題;假如分紅兩份的狀況下,以什麼條件來分份?什麼分裂條件最好,必定是經過實際的計算,遍歷全部的分裂條件,獲得某種分裂條件下某種評分形式最高,就用什麼做爲分裂條件。因此第二個問題是以什麼條件來分份。但何時中止分裂呢?數據不斷分裂的遞歸過程,每一次分裂,儘量讓類別同樣的數據在樹的一邊,當樹的葉子節點的數據都是一類的時候,則中止分類(if else語句)。這是第三個問題。分好的葉子節點裏有yes和no兩種表達,當新數據過來落到這些葉子結點上究竟是yes仍是no?這是第四個問題。大數據
假如如今有30個正例30個負例如圖,哪一種分法更好?爲何不直接給它30正例,30負例分好就能夠?spa
因此接下來咱們的文章會圍繞着如下生成一顆決策樹的幾點考慮進行展開。翻譯
一、第一個將原始數據集篩選.分類成子數據集的分類依據? 也就是須要計算分類後的純度。3d
二、第二個對生成的子數據集不斷分類 直到中止。那何時會中止,也就是中止的條件是什麼?code
三、第三個只要中止了以後,你如今獲得的是一個包含着若干數據點的一個節點,可是節點究竟是Y仍是N,或者多分類狀況的時候是1仍是2仍是3仍是4,也須要經過落在最終葉子節點上的訓練集上的數據的共性來表明這個節點。假如這個節點分出來的全都是正例,那麼未來也得說,它判斷出來爲正例。如何定性的判斷它的共性?blog
本節的話咱們講解第一個問題,純度的量化方式,即咱們分裂條件的計算標準。經常使用的純度的計算方式有Gini係數,信息增益,信息增益率。而這三種計算方式所生成的樹分別對應着,CART樹,ID3樹,C4.5樹。對於CART樹和ID3這兩個樹來說,它的默認分兩支,永遠只分兩支,它是一個二叉樹。對C4.5來講,它能夠分若干個節點。CART意思是Classification and Regression Trees,分類與迴歸樹, 既能夠處理分類問題,又能夠處理迴歸問題。
咱們說下第一種定量的計算純度的方式,基尼係數。公式以下:
pi表明各個類別的機率,對於離散的狀況來講,一般咱們認爲在數據量足夠大的狀況下,頻率能夠近似等於機率。假設有10000條數據,其中有2000條是正例,8000條是負例,在不知道任何信息的狀況下,拿一條新的數據,就判斷屬於正例的機率是多少,只有估計20%是最合理的。有可能估計錯,但只有這麼估計是最合理的。由於機率永遠在小數據集上沒有意義,拿了一條數據,說它機率是20%正例80%負例沒有任何意義,由於有可能估計錯;但一下拿來10萬條數據,它最終在統計上會趨近於有20%的數據變成正例,80%數據變成負例。機率在大數據量上纔有它的意義。咱們這裏經過一個節點內各個label樣本的佔比(即頻率)近似這裏的各個類別的pi機率,因此從這裏能看出決策樹是有監督學習。由於是經過樣本的label,獲得各個類別的比例。因此訓練的時候有人說用到y,是用在計算基尼係數上了,而不是用來做爲分裂條件的。
i表明着當前節點包含幾種可能性,對分類來講,也就是全部的類別佔比。
咱們所謂統計純度就是統計某一個節點內部的純度。舉個例子說明下,假如一個節點有2000個正例,8000個負例,也就是正負0.8:0.2的比例,在這種狀況下,p(i)有幾種可能?兩種。一個是p(Y)即0.2,一個是p(N)即0.8。根據公式,這時這個節點內部的基尼係數是1-(0.2^2+0.8^2)。假如一個節點內所有是正例的話,正負比例爲1:0,此時基尼係數等於0;最純不過。假如比例是0.5:0.5 ,此時基尼係數等於0.5。因此咱們能夠總結出基尼係數用來評估純度時,數值 越低表明着越純。
所以如今就有一個工具,能夠定性的去計算,這個節點裏邊純仍是不純,能夠必定程度上經過基尼係數來判斷。這是判斷一個節點純仍是不純,而每次的分裂不只僅分列出一個節點,怎麼評估此次分裂的好壞呢?好比下面例子:
經過基尼係數來選擇一個最好的分類標準,就是嘗試進行若干種分裂方式,哪一種最後結果最好,純度最高,就選哪一種,由於純度高表明着將來子樹會少分幾回。
一般一棵樹要分多少層?若是不加限制的話,可能會分紅幾百層,對於Cart樹來講,就會有一個致命的缺陷,它是按照計算純度來評價分裂好壞,若是不對它進行限制,讓它一直分裂純度會達到100%,最極端狀況,每一個葉子節點有一個數據,總能讓它分到純度最高,至關於就是記錄了一下。因此生成的樹一般會人爲限制它的層數,不讓它太深。
下節的話咱們講解另外兩種評估純度的計算方式。