構建決策樹的前提:算法
與以前講的那些迴歸算法同樣,若是想要構建一顆決策樹,首先你手裏得有大量的已經知道結果的樣本數據。函數
好比你想經過決策樹來分析一我的是不是罪犯,那麼你手裏就必須得有必定量的人類樣本。而且還得從這些人類樣自己上提取出各類用於分類的特徵,如是否有紋身、學歷高低、是否有刀疤等。3d
而後就是經過這些已經知道結果的樣本參數來構建決策樹。blog
決策樹算法的整個過程以下:遞歸
一、建立一個根節點,把全部數據都放在根節點,而後選擇一個最有特徵,以後按照這個最優特徵對全部數據進行分類。事件
二、判斷每一個子集有沒有被正確分類,若是正確分類,那麼就爲該子集創建葉子結點,把這些子集放到葉子結點裏。若是沒有被正確分類,則繼續選擇子集的最優特徵,而後將子集按最有特徵分隔。數學
遞歸整個2階段,直至全部數據都被正確分類。變量
決策樹的算法主要包含三個部分:im
特徵選擇:特徵選擇的目的是「選取可以最優的將數據集進行分類的特徵」,特徵選擇的關鍵是:信息增益、信息增益比、Gini指數。d3
決策樹的生成:一般利用:信息增益最大、信息增益比最大、Gini指數最小做爲準則。從根節點遞歸生成決策樹。
決策樹的剪枝:剪枝的目的是爲了防止樹過擬合。剪枝包括預剪枝和後剪枝。
由此可看出主要要解決的問題是:
一、最優特徵如何選擇?
二、如何判斷數據有沒有被「正確」分類?
所謂最優特徵,就是指這個特徵擁有最好的分類能力,而衡量其分類是否分的好的標準就是「信息增益」。
所謂信息增益,就是指:對數據進行分類以前與以後數據信息發生的變化。若是分類以後這個信息增益很大,就證實分類分的很好(換句話說經過這個分類的確把信息按一種很大的差別分開了),這時這個分類特徵就是當前狀態下的最優特徵。
所謂信息增益,說明白點就是分類之後信息的價值增長了多少。
而信息的價值是用「熵」這個概念來衡量的。
熵表明了事物的混亂程度,熵越大表示事物越混亂,其價值也越低。
因此信息增益的計算就變成了:分類先後其熵「減小」了多少?
分類先後其熵的差值越大,表示熵減小的越多,信息越穩定,價值也就變高了。
以前說了熵表明了事物的混亂程度(或者說是不肯定度),熵越大表示事物越混亂。
在信息熵中,「信息的價值是經過信息的傳遞體現出來的,傳播的越廣、流傳時間越長的信息越有價值」。
因此信息的某種狀況出現的機率越高,其對應的熵值也越低,好比信息的某種狀況發生的機率爲100%,那麼其天然就是個很確定的事件,混亂程度也爲0,熵就是0.
因而可知熵應該隨着事件的發生機率增大而減少。
「只有一個不肯定變量的信息的熵」的公式爲:
其中P是某一個不肯定變量出現的機率,圖像以下
整個公式圖像爲遞減函數,且自變量P的取值確定是在[0,1]之間,隨着信息出現機率越大,其熵也越小,當事件出現機率爲100%時,其熵天然爲0,即混亂程度爲0,是個很確定的事件。
而通常狀況下每一種信息都會包含多種可能值,
如:學生上課睡覺是一種信息,其包含的可能值就有兩種:睡和不睡。
而以前也說了,熵的計算須要信息出現的機率。
假設咱們以一個50人班的某一節課爲背景,其中20我的睡覺了,30我的沒睡。
那麼上課睡覺這個信息就有兩種數值:20人睡、30人沒睡。
其反映出來的機率就是P(睡) = 2/5 P(沒睡) = 3/5
但咱們要算的是「上課睡覺這個信息」的熵,咱們須要求一個信息那麼就須要對該信息擁有的「全部可能值的出現值」求數學指望,找到一個全部值的平均表達。
(指望:
假設咱們要求某一事件的指望。
首先要分析該事件有多少種可能的結果。
所謂指望就至關因而這些結果的一個平均結果。
指望 = 各結果出現的機率乘上各結果的結果值,而後相加。
例:
事件:某個城市中每一個家庭小孩的個數
該事件的可能結果:0個小孩、1個小孩、2個小孩、3個小孩
指望:這個城市中每一個家庭小孩的個數的平均值(即每一個家庭平均有多少小孩)
假設0個小孩的家庭在該城市中佔1%,1孩佔90%,2孩佔6%,3孩佔3%(能夠看出各類孩子數的機率構成了一個完備事件組),
則:
說明每一個家庭平均有1.1孩。)
因而咱們熵的真正計算公式以下
H是信息的「平均熵」,也就是該信息的平均混亂程度。
以前咱們也說了,咱們最終的目的是要求出「信息增益」,而信息增益指的是:對數據進行分類以前與以後數據信息發生的變化。若是分類以後這個信息增益很大,就證實分類分的很好。
以前咱們已經推導出了:信息在任意一時刻的「熵」的計算公式。
因此咱們如今須要計分類前的熵和分類之後的熵。而後用「分類前的熵」減去「分類後的熵」,其差值就是混亂程度減少的量,即信息增益,這個增益天然是越大越好。
(之因此用分類前減分類後,是用爲分類的目的就是減小信息的混亂程度,分類前的熵天然比分類後的熵要大。而這個混亂程度減小的越多天然分類分的越好。)
經驗熵能夠當作是「分類前的熵」。
假設咱們最後是要經過決策樹預測「某人是不是罪犯」。
咱們如今手上有100我的做爲樣本。
能夠從這100我的中提取出:是否有紋身、是否有刀疤、學歷高低等各類特徵。
並且咱們也知道了,經過各類特徵組合後,100人裏,40個是罪犯,60個是好人。
熵指的是信息的混亂程度。
而經驗熵也是一種熵,是咱們手頭上全部樣本的「最終分類結果」這一信息的混亂程度。
(咱們但願經過每次的分類,使得最終分類結果這一信息混亂度最低)。
而在這個例子裏,咱們最終分類的目的是判斷「某人是不是罪犯」,因此咱們每次分類前的經驗熵都是計算「某人是不是罪犯」這一信息的熵。
某人是不是罪犯這個信息一共有兩種可能結果:是、不是。根據以前的推導咱們乣計算全部可能結果的熵的指望。
因此「某人是不是罪犯」這一事件的熵爲:
H(D) = - [40/100*log2(40/100) + 60/100*log2(60/100) ]
由此經驗熵公式能夠寫成:
|D|表示樣本總容量。
|Ck|表示「知足第k種可能性」的樣本的個數。
此時的H(D) 指的就是「最終分類結果」的熵。
條件熵能夠當作是「分類後的熵」。
咱們分類前與分類後其實只關注「分類的最終結果」這一信息的熵的值(由於獲得最終分類結果纔是咱們創建決策樹的最終目的)。
仍是用上面判斷罪犯的例子,在分類前,咱們計算的是「最終樣本是不是罪犯」這一特徵。
分類後,咱們應該仍是關注「樣本是不是罪犯」這一特徵。
因此,咱們須要知道「按某種特徵分完類之後,樣本的最終分類狀況的熵改變了多少」。
條件熵就是「以某一特徵分類後」的樣本的最終結果狀況的熵。
(如:「按照刀疤分類之後,樣本是不是罪犯」的熵)
條件熵的表達式形式爲H(Y|X),其含義是,在X特徵分類後,Y特徵的熵。(其中Y特徵就是最終的結果特徵,如整個決策樹的目的就是判斷人是不是罪犯,那麼這個Y特徵就是「是不是罪犯」)
公式以下:
其中,pi=P(X=xi),指的是按某特徵分類的各類分類狀況。
條件熵的推導公式以下:
以前說了,信息增益是指分類前的信息熵(經驗熵)減去分類後的信息熵(條件熵),
因此信息增益的公式爲:
g(D,A)=H(D)−H(D|A)
信息增益的結果就是混亂度減小的量,混亂度減小的越多,分類分的越好。
利用信息增益之差來生成決策樹。
從樹根處就開始先計算當前樣本參數的經驗熵,而後計算每種特徵分類後的條件熵,二者取差計算出各類特徵的信息增益。
選擇增益最大的特徵進行分類。
分類完後,繼續計算當前樣本的經驗熵,而後計算「剩餘」的特徵分類的條件熵,遞歸此步驟。
使用此算法生成的樹有如下缺點:
一、生成的樹太「深」,容易產生過擬合。
二、分類特徵變量越多,其信息增益可能越大,也越容易被選成最優特徵。(如身高特徵的變量多是166cm、167cm、168cm、169cm、170cm五種變量,而性別特徵只有男和女兩種變量,那麼身高特徵分類的信息增益每每比性別特徵的信息增益要大)。其實緣由也很好理解,咱們每次分類的目的是把樣本分的更細,更「純淨」,只按男女分確定沒有按照各類身高分分的細緻。
C4.5算法解決了ID3算法「偏向分支過多的特徵分類,而致使過擬合」的問題。
因此信息增益比提出了一個「懲罰係數」,用來下降分支過多的特徵的信息增益。
信息增益比公式以下:
其中HA(D)是以當前分類特徵A做爲特徵變量而計算的經驗熵。(以前咱們的經驗熵用的都是最終特徵作特徵變量)
能夠看出,若是某特徵分支越多,其對應的該特徵經驗熵也越大,相處後,信息增益比會減少。
至關於分支越多,其分支增益就會相應收到懲罰而減小某種比例。