大白話5分鐘帶你走進人工智能-第二十四節決策樹系列之分裂流程和Gini係數評估(3)

 第二十四節決策樹系列之分裂流程和Gini係數評估(3)
算法

上一節中咱們講解了決策樹的數學表達形式,本節的話咱們講解決策樹的分裂流程以及分裂條件的評估。咱們基於決策樹的遞歸表達式上:app

                                    $G(\mathbf{x})=\sum_{c=1}^{C}[b(\mathbf{x})=c] \cdot G_{c}(\mathbf{x})$

就能夠知道訓練一顆決策樹須要哪些條件?臺灣大學林軒田教授給咱們一個總結。工具

       咱們翻譯一下上面的話,if termination critertion met  return base hyponthesi gt(x)。若是咱們遇到終止條件,就返回基礎的gt(x)的表達式。else 一、learn branching criteria b(x) ,學習bx的表達式。 二、將原始的數據集分紅C份,將數據集分到各個子樹裏面。三、創建子樹的Gc表達式。四、返回最後表達結果。

       因此決策樹從迭代考慮分裂的話咱們須要4個條件: 一、分支個數(number of branches)即每次分裂要分紅幾支。 二、分支條件(branching criteria),當前分支判斷的條件。 三、終止條件(termination criteria),不可能一直分下去,要有個終止條件。 四、基本算法(base hypothesis),葉子結點到底如何表達。四個問題搞明白了,如何獲得一棵決策樹咱們就明白了。學習

咱們的目標是經過大量的數據生成一棵很是好的樹,用這棵樹來預測新來的數據。好就是必定要能反映客觀規律,在大數定理的理論支持下,若是收集的訓練集足夠龐大,訓練集就必定程度上可以反映客觀規律。而後咱們用生成好的樹來預測新來的數據,舉個例子來解釋下如何生成決策樹的4個條件?假如訓練集上有100條數據,首先全部的數據都在根節點裏面出現。咱們要給它分到各個子樹裏面,那麼每次分裂要分紅幾份?這是第一個問題;假如分紅兩份的狀況下,以什麼條件來分份?什麼分裂條件最好,必定是經過實際的計算,遍歷全部的分裂條件,獲得某種分裂條件下某種評分形式最高,就用什麼做爲分裂條件。因此第二個問題是以什麼條件來分份。但何時中止分裂呢?數據不斷分裂的遞歸過程,每一次分裂,儘量讓類別同樣的數據在樹的一邊,當樹的葉子節點的數據都是一類的時候,則中止分類(if else語句)。這是第三個問題。分好的葉子節點裏有yes和no兩種表達,當新數據過來落到這些葉子結點上究竟是yes仍是no?這是第四個問題。大數據

假如如今有30個正例30個負例如圖,哪一種分法更好?爲何不直接給它30正例,30負例分好就能夠?spa

由於分裂條件不能用到y上的信息,若是訓練的時候把y用了,可是預測的時候沒有y,拿不到y的數據。因此分裂只能讓它經過x來分。既然只能經過x來分,無疑第二種更好,由於第二個裏面每個節點裏面,不管是左邊包含大部分的正例的節點仍是右邊包含大部分負例的節點,夾雜其餘類別的都不多,因此分出來的純度很高。由於它能夠經過更少的分裂次數,達到一個比較好的效果, 因此這就引出了咱們但願選擇一個分裂條件,要用這種分裂條件分裂出來的兩個節點,各自內部的純度越高越好。 那麼咱們就須要一個量化評估的方式來評估什麼是純度?這是咱們生成一顆決策樹須要解決的其中的一個問題。

因此接下來咱們的文章會圍繞着如下生成一顆決策樹的幾點考慮進行展開。翻譯

一、第一個將原始數據集篩選.分類成子數據集的分類依據? 也就是須要計算分類後的純度。3d

二、第二個對生成的子數據集不斷分類 直到中止。那何時會中止,也就是中止的條件是什麼?code

三、第三個只要中止了以後,你如今獲得的是一個包含着若干數據點的一個節點,可是節點究竟是Y仍是N,或者多分類狀況的時候是1仍是2仍是3仍是4,也須要經過落在最終葉子節點上的訓練集上的數據的共性來表明這個節點。假如這個節點分出來的全都是正例,那麼未來也得說,它判斷出來爲正例。如何定性的判斷它的共性?blog

本節的話咱們講解第一個問題,純度的量化方式,即咱們分裂條件的計算標準。經常使用的純度的計算方式有Gini係數,信息增益,信息增益率。而這三種計算方式所生成的樹分別對應着,CART樹,ID3樹,C4.5樹。對於CART樹和ID3這兩個樹來說,它的默認分兩支,永遠只分兩支,它是一個二叉樹。對C4.5來講,它能夠分若干個節點。CART意思是Classification and Regression Trees,分類與迴歸樹, 既能夠處理分類問題,又能夠處理迴歸問題。

咱們說下第一種定量的計算純度的方式,基尼係數。公式以下:

                                                            $\operatorname{Gini}(D)=1-\sum_{i=1}^{n} p_{i}^{2}$

          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。因此咱們能夠總結出基尼係數用來評估純度時,數值 越低表明着越純。

所以如今就有一個工具,能夠定性的去計算,這個節點裏邊純仍是不純,能夠必定程度上經過基尼係數來判斷。這是判斷一個節點純仍是不純,而每次的分裂不只僅分列出一個節點,怎麼評估此次分裂的好壞呢?好比下面例子:

                 從D分到D1,D2。怎麼綜合的看這一次分裂到底好很差呢?用D1或者D2,仍是二者都要用。其實是把二者結合起來再實現加權平均。公式以下:

                假如原始數據有100條,分到左節點94條,右節點6條。假設左邊基尼係數是0.5,右邊基尼係數是0。

             這次的分裂效果能直接說(0.5+0)/2嗎,其實是不公平的。由於0.5是說明這94條數據分的純度,而0是這6條數據分的純度,說明這6條很純。因此咱們須要把左節點和右節點個數的佔比做爲權重加權平均做爲本次分裂的評判標準。有了上述評判標準,咱們再回到咱們所說的對於一個數據集的分裂過程。對於一個數據集來講,咱們須要遍歷全部的維度去分裂,怎麼遍歷每一個維度?假設數據集有6個維度以下:

 

假如這裏面維度的數據有兩種狀況,連續性數據和離散型數據,那麼每一個維度的分裂條件的取值該怎麼取呢?好比對於第一個維度x1有10000條數據,連續性數據,咱們要作的首先是對這10000個數據進行排序,從大到小排列出來。而後依次的再每兩個數據中間取中位數做爲分裂數值計算基尼得分。好比數據狀況是1.88m,1.78m,1.68m,咱們就要取(1.88+1.78)/2=1.83 ,而後大於1.83的放在左邊,小於1.83的放在右邊,計算下此時的基尼得分。而後再取(1.78+1.68)/2=1.73當作x1維度的分列條件,大於1.73的放在左邊,小於1.73的放在右邊,計算下此時基尼得分。假若有10000條數據,就會有9999個這種中位數,而後分別計算出它們的基尼係數。保留最小的那個基尼係數對應的數值就表明着用x1維度去分最好的分裂結果,假如此時經過x1計算的基尼係數是0.1。而後咱們再遍歷x2,假如x2,是離散性數據呢?咱們該怎麼選擇x2中的數值進行分裂呢?對於連續型數據咱們能夠進行排序,可是對於離散性數據,咱們不能排序,實際上就變成排列組合了,假若有100個類別,第1個類別和剩下99個類別是一種分法,第1和第2個類別做爲一個節點和剩下98個又是一種分法,第1和第3個做爲一個節點和剩下98個又是一種分法,這樣的狀況太多了。因此咱們通常不這樣作,既然Cart樹是二分類數據,只能分兩個節點,因此咱們就乾脆給它分兩類,第一種分裂狀況是等於1類別和不等於1類別,第二種分裂狀況是等於2類別和不等於2類別,而後依次遍歷全部這種狀況計算下分別的基尼係數,求最小的那一個做爲x2維度下分裂條件數值,這樣咱們就獲得x2做爲分裂維度下所求得的基尼係數。假設是0.05,此時咱們就再也不用x1這個維度分裂了。而後再依次對x3,維度進行分裂。因此咱們就是這樣依次試着每個維度做爲分裂條件,而後計算基尼係數,去獲得最終最小的那個基尼係數所對應的維度的取值。當根節點分裂完兩個子樹以後,如果子節點不純,再依次進行上述方法再分便可。

經過基尼係數來選擇一個最好的分類標準,就是嘗試進行若干種分裂方式,哪一種最後結果最好,純度最高,就選哪一種,由於純度高表明着將來子樹會少分幾回。 

一般一棵樹要分多少層?若是不加限制的話,可能會分紅幾百層,對於Cart樹來講,就會有一個致命的缺陷,它是按照計算純度來評價分裂好壞,若是不對它進行限制,讓它一直分裂純度會達到100%,最極端狀況,每一個葉子節點有一個數據,總能讓它分到純度最高,至關於就是記錄了一下。因此生成的樹一般會人爲限制它的層數,不讓它太深。

下節的話咱們講解另外兩種評估純度的計算方式。

相關文章
相關標籤/搜索