決策樹(Decision Tree)算法原理總結(一)

        如同上幾篇我們探討的SVM一樣,決策樹算法既可以處理分類問題(二分類和多分類),又可以處理迴歸問題。同時,決策樹也廣泛的運用在集成算法中,比如隨機森林算法。本篇我們沿着決策樹算法的發展,來探討下決策樹ID3算法和C4.5算法。CART算法決策樹我們下篇單獨再探討。

1)來自借錢的思考
        決策樹的原理其實很簡單,我們生活中已經在運用這些原理。比如,某一個朋友向你借錢,在你心裏一定會有一系列的決策,最後決定是否借錢給他,把你的決策畫成一顆樹狀結構就是決策樹了。比如我的借錢決策:
借錢決策
        從上圖我們先來認識下決策樹的基本結構,決策樹由節點(矩形和橢圓)和有向的邊(箭頭)組成,節點按所處在決策樹的位置可以分爲根節點,中間節點和葉子節點。其中每個節點代表一個屬性,每個分支代表一個決策(規則),每個葉子代表一個結果(分類值或連續值)。

        再回到借錢的栗子上來。假如按照上面的決策樹進行借錢決策,一共外借了4次錢,結果有2次按時還了錢,另外2次借的錢打水漂了,損失有點大。於是我調整了下策略,把是否有工作放在首要位置(跟節點)。決策樹的結構如下:在這裏插入圖片描述
於是我又外借了4次錢,結果有3次按時還了錢,只有1次外借的錢打了水漂。對比第一種策略,不還錢的次數減少了,也可以說打水漂的不確定性減少了。所以,只要不確定性有所降低,我們的決策樹就有所優化。那麼,不確定性又該怎麼去度量呢?幸運的是,早在1948年克勞德·愛爾伍德·香農提出了信息熵的概念,專門用來描述事物的不確定性。

2)信息熵(Information Entropy)
        信息熵,它是表示對隨機變量不確定的度量,不確定性越大,信息熵越大。隨機變量xx的信息熵的表達式如下(信息熵表達式的由來可參考本篇博客信息熵部分):
                     H(x)=xp(x)log(p(x))=i=1np(xi)logp(xi)H(x) = -\sum_{x}p(x)log(p(x))=-\sum_{i=1}^{n}p(x_i)logp(x_i)

       從表達式中可以看出,隨機變量的取值個數越多,狀態數也就越多,信息熵就越大,混亂程度就越大。當隨機分佈爲均勻分佈時,信息熵最大。
        再讓我們回到栗子中來。只要不確定性減少,決策策略就得到了優化。因此我們在進行特徵選擇時,可以選擇當前不確定性減少最多的特徵(貪心法)。那麼該怎麼去定義不確定性的減少呢?ID3算法使用信息增益,C4.5使用信息增益率,CART樹使用Gini係數。

3)ID3算法
       ID3算法是用信息增益來定義不確定性的減少程度,選擇信息增益最大的特徵來建立決策樹的當前節點。特徵A對訓練集D的信息增益g(D,A)g(D,A)表達式如下:
                     g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)

       信息增益具體的算法過程:
輸入:訓練數據集D合特徵A;
輸出:特徵A對訓練數據集D的信息增益g(D,A)g(D,A)

a)計算數據D的信息熵H(D)H(D)
                     H(D)=k=1KCkDlog2CkDH(D)=-\sum _{k=1}^K\frac{C_k}{D}log_2\frac{C_k}{D}
b)計算特徵A對數據集D的條件熵H(DA)H(D|A)條件熵概念可以參考本篇博客
                     H(DA)=i=1nDiDH(Di)=i=1nDiDk=1KDikDilog2DikDiH(D|A)=-\sum _{i=1}^n\frac{D_i}{D}H(D_i)=-\sum _{i=1}^n\frac{D_i}{D}\sum _{k=1}^K\frac{D_{ik}}{D_i}log_2\frac{D_{ik}}{D_i}
c)計算信息增益
                     g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)

       下面我們來看看ID3的生成算法:
輸入:訓練數據集D,特徵集A,閾值ε\varepsilon
輸出:決策樹T
a)初始化信息增益的閾值ε\varepsilon
b)若D中所有實例屬於同一類CkC_k,則T爲單節點樹。標記類別爲CkC_k,返回T;
c)若AA爲空,則T爲單節點樹,將D中實例數最大的類CkC_k作爲該節點的 類標記,返回T;
d)否則,計算A中各特徵對D的信息增益,選擇信息增益最大的特徵AgA_g
e)如果AgA_g的信息增益小於閾值ε\varepsilon,則返回單節點樹T,將D中實例數最大的類CkC_k作爲該節點的 類標記,返回T;
f)否則,按特徵AgA_g的不同取值aia_i,依Ag=aiA_g=a_i將D分割爲若干個非空子集DiD_i,將DiD_i中實例數最大的類作爲標記,構建子節點,由節點和子節點構成樹T,返回T。
g)對第ii個子節點,以DiD_i爲數據集,以AAgA-{A_g}爲特徵集,遞歸的調用afa步-f步,得到子樹TiT_i,返回TiT_i

3)ID3的侷限性
       ID3由 Ross Quinlan 在1986年提出,算法本身還存在很大的侷限性:

  • 採用信息增益做特徵選擇,會存在偏向於選擇特徵取值較多的特徵;
  • 無法處理處理連續變量;
  • 無法對缺失值進行處理;
  • 沒有剪枝策略,容易過擬合;

爲了克服上述不足,Ross Quinlan 對ID3算法進行了改進,這就是下面將要探討的C4.5算法。

4)C4.5算法
       C4.5重大的改進是,提出利用信息增益比(Information Gain Ratio)來做特徵選擇,解決ID3算法存在的特徵偏向問題。
       特徵A對訓練集D的信息增益比gR(D,A)g_R(D,A),爲信息增益g(D,A)g(D,A)與訓練集D關於特徵A的值的熵HA(D)H_A(D)之比,表達式爲:
                     gR(D,A)=g(D,A)HA(D)g_R(D,A)=\frac{g(D,A)}{H_A(D)}
其中HA(D)=i=1nDiDlog2DiDH_A(D) = -\sum _{i=1}^n\frac{D_i}{D}log_2\frac{D_i}{D}nn是特徵A取值的個數。對於類別多的特徵,HA(D)H_A(D)的取值會偏大,用來平衡信息增益帶來的偏倚。

       C4.5對於連續性值的處理方式爲我們熟知的特徵離散化。假如n個樣本的連續性特徵A有m個取值。C4.5算法首先將m個取值從小到大排序爲a1,a2...ama_1,a_2...a_m,分別對相鄰的兩個樣本取平均數,一共得到m1m-1個劃分點,其中第ii個劃分點爲ai+ai+12\frac{a_i+a_{i+1}}{2};然後對於m-1個劃分點,分別計算以該劃分點作爲二元分類點時的信息增益,並選擇信息增益最大的點作爲該連續特徵的二元離散分類點

       對缺失值的處理,本質就是算法怎麼填補缺失值,C4.5在缺失值處理也做了優化。樣本中存在缺失值,會引起兩個問題:第一,如何在特徵值缺失的情況下進行特徵選擇,即存在缺失值特徵的信息增益比該怎麼計算?第二,特徵選定之後,缺失樣本該分到那個子節點中去?
       對於第一個問題,C4.5的做法是,計算不含缺失值樣本的特徵A的信息增益比,乘上一個權重,權重爲不含缺失樣本佔總樣本的比例;對於第二個問題,C4.5的做法是,將缺失特徵的樣本同時劃分入所有的子節點中,每個子節點所佔的權重爲每個該子節點樣本佔總樣本的比例。

       對於過擬合問題,C4.5採用後剪枝的方式來簡化決策樹。我們在CART樹再一起討論。

5)C4.5的侷限性
       雖然C4.5在ID3算法上進行了很大的改進,但是還是存在一些明顯的侷限性:

  • 當特徵的類別特別多時,生成決策樹(多叉樹)時,運行效率會變得非常低;
  • 只能處理分類問題;
  • 不管信息增益還是信息增益比,都擁有大量耗時的對數運算,甚至連續值還有排序運算,比較消耗算力;

下篇我們重點討論CART算法如何優化C4.5所存在的這些侷限性。

(歡迎大家在評論區探討交流,也歡迎大家轉載,轉載請註明出處。)

上一篇:Scikit-learn 支持向量機庫總結與簡單實踐
下一篇:決策樹(Decision Tree)算法原理總結(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章