第二十四節決策樹系列之分裂流程和Gini係數評估(3)
上一節中我們講解了決策樹的數學表達形式,本節的話我們講解決策樹的分裂流程以及分裂條件的評估。我們基於決策樹的遞迴表示式上:
就可以知道訓練一顆決策樹需要哪些條件?臺灣大學林軒田教授給我們一個總結。
所以決策樹從迭代考慮分裂的話我們需要4個條件: 1、分支個數(number of branches)即每次分裂要分成幾支。 2、分支條件(branching criteria),當前分支判斷的條件。 3、終止條件(termination criteria),不可能一直分下去,要有個終止條件。 4、基本演算法(base hypothesis),葉子結點到底如何表達。四個問題搞明白了,如何得到一棵決策樹我們就明白了。
我們的目標是通過大量的資料生成一棵非常好的樹,用這棵樹來預測新來的資料。好就是一定要能反映客觀規律,在大數定理的理論支援下,如果收集的訓練集足夠龐大,訓練集就一定程度上能夠反映客觀規律。然後我們用生成好的樹來預測新來的資料,舉個例子來解釋下如何生成決策樹的4個條件?假如訓練集上有100條資料,首先所有的資料都在根節點裡面出現。我們要給它分到各個子樹裡面,那麼每次分裂要分成幾份?這是第一個問題;假如分成兩份的情況下,以什麼條件來分份?什麼分裂條件最好,一定是通過實際的計算,遍歷所有的分裂條件,得到某種分裂條件下某種評分形式最高,就用什麼作為分裂條件。所以第二個問題是以什麼條件來分份。但什麼時候停止分裂呢?資料不斷分裂的遞迴過程,每一次分裂,儘可能讓類別一樣的資料在樹的一邊,當樹的葉子節點的資料都是一類的時候,則停止分類(if else語句)。這是第三個問題。分好的葉子節點裡有yes和no兩種表達,當新資料過來落到這些葉子結點上到底是yes還是no?這是第四個問題。
假如現在有30個正例30個負例如圖,哪種分法更好?為什麼不直接給它30正例,30負例分好就可以?
所以接下來我們的文章會圍繞著以下生成一顆決策樹的幾點考慮進行展開。
1、第一個將原始資料集篩選.分類成子資料集的分類依據? 也就是需要計算分類後的純度。
2、第二個對生成的子資料集不斷分類 直到停止。那什麼時候會停止,也就是停止的條件是什麼?
3、第三個只要停止了之後,你現在得到的是一個包含著若干資料點的一個節點,但是節點到底是Y還是N,或者多分類情況的時候是1還是2還是3還是4,也需要通過落在最終葉子節點上的訓練集上的資料的共性來代表這個節點。假如這個節點分出來的全都是正例,那麼將來也得說,它判斷出來為正例。如何定性的判斷它的共性?
本節的話我們講解第一個問題,純度的量化方式,即我們分裂條件的計算標準。常用的純度的計算方式有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%,最極端情況,每個葉子節點有一個資料,總能讓它分到純度最高,相當於就是記錄了一下。所以生成的樹通常會人為限制它的層數,不讓它太深。
下節的話我們講解另外兩種評估純度的計算方式。