ID3決策樹分類的根據是樣本集分類先後的信息增益。算法
假設咱們有一個樣本集,裏面每一個樣本都有本身的分類結果。blog
而信息熵能夠理解爲:「樣本集中分類結果的平均不肯定性」,俗稱信息的純度。排序
即熵值越大,不肯定性也越大。事件
假設樣本集中有多種分類結果,裏面某一種結果的「不肯定性」計算公式以下集羣
其中二叉樹
x:爲按照某特徵分類後的第x種分類結果方法
p(x):表示該分類結果樣本集在總樣本集中的所佔比例。im
Dx:表示樣本結果爲x的樣本數量。d3
D:表示樣本的總數量統計
可看出某一種分類結果在總樣本集中所佔比例越少,其「不肯定性」也越大。
樣本集的熵,就是他全部分類結果的平均不肯定性,即全部分類結果不肯定性求指望。公式以下:
說白了,就是算出整個樣本集中每個分類結果的不肯定性,而後求一個指望值,就做爲這整個樣本集的熵值。
熵越大表示事件變數越多,咱們要作的就是每一次分類都讓事件集變的最穩定。因此當咱們選擇某一個特徵進行分類後,樣本集分類先後的熵的減少量就是熵的增益。
ID3算法的核心就是計算按照每一種特徵分類後,其熵差大小,選擇能使熵差最大的特徵做爲分類特徵。
分類前的熵就是集羣整個的熵。
分類後的熵實際上是全部分類後的小樣本集的熵的指望。
一、抗噪聲性差,若是數據樣本數量太少或噪聲太大,就會產生過擬合的問題。
樣本少,其樹的構成基本上就是爲少數樣本量身定作的樹,若是噪聲太大,或樣本少且有噪聲的話,不少樹枝都是噪聲擬合出來的。
二、在選擇最優特徵時,很容易傾向於選擇「特徵值種類較多」的特徵,做爲分類特徵。
咱們舉個極端點的例子,假設有100個樣本集,如今有一個特徵其數值種類也是100,若是按該特徵分類,就能把這個樣本集分紅100份,每份一個樣本。在用ID3算法作決策樹時,確定會選擇這個特徵做爲第一個最優特徵,由於這個特徵分出來的樣本集每個純度都是最高。
三、沒法處理特徵值爲連續型數據的特徵。(不過能夠考慮把連續型數據轉化成離散型數據)
即,能夠處理像性別特徵、boolen特徵等離散型特徵,但無法處理特徵值在某個區間內能夠任意取值的特徵,如身高特徵、年齡特徵。
針對上面說的ID3算法的第二個缺點「最優特徵選擇傾向於特徵種類較多的特徵」。
咱們先來看下特徵種類較多時,分類會發生什麼。
假設都是均分100個樣本,
特徵值有2種的特徵會把樣本集分紅50和50.
特徵值爲4種的特徵會把樣本集分紅2五、25,25,25.
可見特徵值越多,就會產生越多的「小數目」樣本集,而小數目樣本集在分類效果上是不如大樣本集好的(如過擬合、抗噪差等問題),因此對於某特徵分類後會產生「小數目」樣本集的分類後的熵,咱們須要有一個懲罰值,即:分類後產生的樣本集越小,它的熵值也要懲罰性的增大。
這樣雖然ID3算法中會由於不少分類後的小數量樣本集而產生低值的指望熵,但作懲罰值處理後,熵值就會平衡性的增大。
在C4.5中懲罰小數量樣本集的作法是,
在根據某特徵分類,並計算出分類先後的熵差後,再計算該特徵的懲罰值,用該分類特徵的熵差除以懲罰值得出「信息增益率」,使信息增益率越大的特徵,就是最優特徵。即:
其中懲罰值實際上就是「信息熵」,只不過這裏的信息指的不是計算信息增益時「樣本集中分類結果的平均不肯定性」,而是「總樣本集中分類後子樣本集數目的平均不肯定性」,即:
其中:
D:分類前的總樣本數量。
i:按某特徵分類後樣本子集序號。
Di:按某特徵分類後的第i個子集的數量。
由此看出,樣本數量越少,懲罰值越大,相除後的信息增益率也就越小,依此作到了必定的平衡,因爲「懲罰」了小樣本數量集,其因爲數量少帶來信息增益抗噪性差的問題也獲得必定程度的解決。
這就是C4.5算法最大的好處,解決了ID3算法第二個缺陷,緩解了ID3算法的第一個缺陷。
不過ID3算法的第三個不能處理連續型特徵數據的問題。C4.5算法自己也不能直接處理連續數據。
另外C4.5和ID3算法還有一個特色,這倆算法的根本其實都要計算信息增益,而信息增益的一個大前提就是要先進行分類,而後才能計算增益,因此每計算一次增益也就表明進行了一次分類,分類用了的特徵接下來就不能再用了,因此ID3和C4.5算法在分類時會不斷消耗特徵。
簡單來說就是,有一個相似於熵的指標叫Gini指數,其表明了分類結果的不肯定性,因此天然是越小越好。
每次分類前計算分類先後的Gini指數,求差得出「Gini指數增益」,能使Gini指數增益最大的特徵就是最優特徵。
須要注意的是,CART算法分類時,即便特徵有大於兩個特徵值,也仍是會把樣本集分紅兩類,最後造成的是標準二叉樹。
首先計算分類前樣本集的Gini指數,Gini指數想表達的東西和信息熵相似,都是想表達樣本集分類結果的不肯定性,Gini指數或熵越大,表示樣本集分類結果不肯定性也越大。
假設樣本集數量爲D,分類結果有n種,Dk表示總樣本集中分類結果爲第k種的樣本數量。
那麼從總樣本集中選出分類結果爲k的樣本的機率爲:
選出分類結果爲k的樣本的不肯定性(即選出分類不爲k的樣本機率)爲:
而總樣本集的分類結果不肯定性,就是計算n種分類結果的不肯定性,而後取指望:
這個公式就是樣本集的Gini指數,用於表達樣本集分類結果的不肯定性,Gini指數越大樣本集越不肯定,化簡後得:
按照某特徵分類後的Gini指數爲,分類後各樣本集Gini指數求指望,
假設分類前總樣本集數量爲D,按特徵分類後獲得兩堆樣本集數量分別爲S1和S2(因爲CART算法生成二叉樹的特性,因此只能分紅兩堆),則樣本集分類後的Gini指數爲:
若是特徵值大於兩個,則列出全部可能的分類狀況,依次分類並計算各分類後的Gini指數,選擇分類後Gini指數最小的分類狀況做爲特徵的分類方法。
如,特徵有a,b,c三個特徵值,
則可能的分類方法有:(a,(b,c)),(b,(a,c)),(c,(a,b))
假設(b,(a,c))這種分類方式分類後的Gini指數最小,則按照特徵值爲b的分爲第一個樹枝,特徵值爲a或c的分爲第二個樹枝,
第一個樹枝裏該特徵只有b特徵值,則後續分類時不須要再考慮該特徵。
第二個樹枝裏該特徵中還有a和c兩種特徵值,須要注意的是「後續分類時仍是要考慮該特徵,且特徵值爲a和c」。
最終,樣本集D,按照某特徵分類出S1樣本集和S2樣本集後,其Gini指數增益爲:
選取能使Gini指數增益最大的特徵分類做爲最優特徵分類。
1.C4.5本質上仍是基於信息熵得出的信息增益比,而CART算法的分類樹是基於Gini指數得出的Gini指數增益。
2.CART是一顆二叉樹,而C4.5算法沒有這個特色。這是由於在進行特徵分類上,C4.5算法每次選擇一種特徵進行分類後,每個特徵值都是一個樹枝。而CART算法每次分類會把特徵的全部特徵值分紅兩堆,符合A堆裏面的特徵值的樣本算A分支,符合B堆特徵值的樣本算B特徵。
3.基於第二點不一樣,咱們可看出C4.5算法每選擇一個特徵按各個特徵值分類後,接下來的分類就不會再考慮該特徵了(由於該特徵已按特徵值完全劃分完了)。而CART算法是把特徵值分紅兩堆,假設有abcd四個特徵,通過Gini增益計算後,ab爲1堆,cd爲2堆,那麼按照此分類後1堆和2堆該特徵都沒有被徹底劃分,1堆樣本還能對a和b特徵值再進行劃分。
因此CART算法的特徵在分類過程當中可能重複出現,而C4.5只能出現一次。
連續型數據離散化的方法不少,最易懂的就是憑經驗離散化,
好比一批樣本集裏有身高特徵(cm),樣本的數值有:162,164,165,166,168,170,173,180
這個時候咱們就能夠憑藉經驗或者想要統計的結果,對這組連續數據劃分一個離散範圍,如設定小於165的是一類,165到170的是一類,大於170的是一類,這樣就把連續數據離散化成一個範圍判斷了。
但憑藉經驗進行範圍劃分明顯不靠譜,
咱們能夠利用ID三、C4.五、CART這些算法,將連續數據離散化。
簡單來說思路就是:
依次設立劃分點,而後數值小於該劃分點的數據分爲一類,大於的分爲另外一類。
分別計算根據各個劃分點分類先後的信息增益(ID3)或信息增益率(C4.5)或Gini指數增益(CART),選出使得增益達到最大的劃分點做爲分類特徵值。
至於劃分點的選擇,通常是將全部連續數值從小到大排序,每兩點間取平均數創建一次劃分點進行分類,並計算信息增益或信息增益率。