決策樹 Decision Tree

決策樹的核心思想就是 if else,實現了 conditional aggregation,關鍵問題在於分裂的時候哪些特徵在前哪些特徵在後。從 ID3 開始使用熵(entropy)來做爲決策選擇的度量。決策樹能夠作分類,也能夠作迴歸,是一種比較靈活的算法。主要包括 ID三、C4.五、CART,能夠做爲後續許多 ensemble 方法(例如 random forest 和 gradient boosting decision tree)的基礎模型。算法

 

能夠把決策樹模型從 if else 的角度拆解爲 G(x) = ΣTt=1 qt(x)*gt(x) ,其中 qt(x) 表示條件、gt(x) 表示基本假設。從遞歸角度來拆解,G(x) = ΣCc=1 [b(x) = c]*Gc(x),其中 b(x) 表示分支條件,Gc(x) 表示子樹。dom

決策樹模型的原則就是每次決策過程越簡單越好,很相似人作決策的過程,可解釋性強。函數

 

 

spa

度量隨機變量的不肯定性,越混亂熵越大。H(X) = - ∑ p(xi) * log(p(xi)) ,其中 p(xi) b表示隨機變量 X 取值到 xi 的機率,熵要對 X 全部可能的取值求和。例如一枚均勻硬幣拋一次,正面朝上的次數爲 X,那麼 H(X) = - 0.5log(0.5) - 0.5log(0.5) = log2。另外定性的分析,均勻的狀況下不肯定性最大,因此 H(X) = log2 其實也是這個問題中熵的最大值。rest

 

對於兩個隨機變量:blog

  聯合熵 H(X, Y) = - ∑ p(x, yi) * log(p(x, yi)) 排序

  條件熵 H(X | Y) = - ∑ p(x, yi) * log(p(xi | yi)) = Σ p(yj) * H(X | yj) ,度量在知道 Y 之後 X 的剩下的不肯定性遞歸

  互信息(信息增益) I(X , Y) = H(X) - H(X | Y) , 度量在知道 Y 之後 X 的不肯定性的減小程度ci

 

 

ID3 決策樹it

用信息增益的大小來選擇哪一個特徵來用於決策樹中當前節點的分裂,遞歸地構建決策樹,直到全部特徵的信息增益均很小或沒有特徵能夠選擇爲止。ID3 至關於用極大似然法進行機率模型的選擇。

算法流程:

  1. 初始化信息增益的閾值 ε

  2. 若是樣本都屬於同一類 D,則返回單節點樹 T,類別標記爲 Di

  3. 若是特徵爲空則返回單節點樹 T,類別直接標記爲樣本中數量最多的類別

  4. 計算 A 中全部維度的特徵(n 維)對輸出 D 的信息增益 I(D, A) = H(D) - H(D | A),選擇信息增益最大的特徵 A分裂。若是 Ag 的信息增益小於設定的閾值,返回單節點樹,類別直接標記爲樣本中數量最多的類別;不然按 Ag 的全部不一樣取值 ai 把樣本集 D 分割成若干類別的非空子集 Di ,每一個類別產生一個子節點,對應特徵值爲 Agi ,類別標記爲 Di 中實例數最大的類別。返回增長了節點的樹 T

  5. 對全部的子節點,令 D = Di,A = A - { Ag},遞歸調用 2-4,獲得子樹 T並返回

 

ID3 決策樹存在的問題:

  1. 只有樹的生成,容易過擬合。

  2. 沒有考慮連續特徵

  3. 信息增益做爲選擇特徵的標準存在問題(相同條件下,取值比較多特徵信息增益大)

  4. 無法處理缺失值

 

 

C4.5 決策樹

如何改進 ID3:

  1. 引入正則化係數初步剪枝

  2. 將連續特徵離散化。好比 N 個樣本的連續特徵取值有 N 個,就取相鄰兩點取值的平均數做爲劃分點,一共獲得 N-1 個劃分點。對全部的劃分點,分別計算以該點做爲二分類點時的信息增益比,選擇最大的做爲該連續特徵的二元離散分類點

  3. 用信息增益比。IR(D, A) = I(D, A) / HA(D),其中 HA(D) 是 D 關於 A 的熵,HA(D) = - Σni=1 |Di|/|D|  * log(|Di|/|D|),n 是特徵 A 取值的個數

  4. 缺失值的處理

   樣本缺失某些特徵的狀況下如何選擇劃分:對於某一個有缺失值的特徵 A,將數據分紅兩部分,對每部分樣本設置一個權重(初始能夠都爲1),而後劃分數據,一部分是有特徵值 A 的數據 D1 ,一部分是沒有特徵值 A 的數據 D2 。而後對 D來和對應的 A 特徵的各個特徵值一塊兒計算加權後的信息增益比,最後乘上係數 ε, ε 爲 D1 樣本加權後所佔加權總樣本的比例

   選定了劃分屬性,對於該屬性上缺失特徵的樣本如何處理:能夠把缺失特徵值的樣本同時劃分入全部的子節點,同時將該樣本的權重按各子節點的樣本容量比例來分配。

 

C4.5 決策樹存在的問題:

  1. 仍是須要後剪枝

  2. 多叉樹不如二叉樹效率高

  3. 只能作分類

  4. 大量對數運算耗時,若是是連續特徵還會有大量排序運算

 

 

CART 決策樹

比較優的一種決策樹,既能作分類也能作迴歸,基於二叉樹結構,也支持對連續特徵的處理和對缺失值的處理,採用後剪枝有效解決過擬合。驅動思想就是,要加權考慮分割後兩邊的數據都各自比較「純」(如何衡量?均方偏差或基尼指數)。若是 serving 的過程當中樣本缺失某個維度的特徵,就找一個 surrogate 來代替缺失的特徵(訓練的時候爲每一個特徵的分割找一些替代特徵的分割,要和原來的切割方式越接近越好)。

 

基尼指數

在分類問題中,假設有 K 個類別,樣本點屬於第 k 類的機率爲p,則機率分佈的基尼指數定義爲

Gini(p) = ΣKk=1  pk (1 - pk) = 1 -  ΣKk=1  (pk)2

對於給定的樣本 D,假設有 K 個類別,第 k 個類別的數量爲 Ck ,則樣本 D 的基尼指數爲

Gini(D) = 1 - ΣKk=1 ( |Ck|/|D| )2

 

能夠看出基尼指數和熵之半很接機,均可以用來近似分類偏差率,但基尼指數中的二次運算比對數運算簡單的多。

 

CART 分類樹對連續特徵和離散特徵的處理 

 

 對於連續特徵,也是離散化,和C4.5相同。區別在於使用基尼指數做爲選擇劃分點的度量(decision stump),以及若是當前節點爲連續屬性,該屬性後面還能夠參與子節點的產生選擇過程。

對離散特徵的處理就是不停的二分離散特徵,例如特徵 A 有 A一、A二、A3 三種類別,CART 分類樹會選擇{A1}和{A2, A3}、{A2}和{A1, A3}、{A3}和{A1, A2}中基尼指數最小的組合(decision subset)。因爲沒有把 A 特徵的取值徹底分開,後面還有機會在子節點繼續選到 A 來劃分。這和 ID三、C4.5 直接構建多叉樹一次徹底分開特徵不一樣。

 

CART 分類樹算法流程:

從根節點開始,遞歸地構建 CART 決策樹

  1. 對當前節點的數據集合 D,若是樣本容量小於閾值或沒有特徵,則返回決策子樹,當前節點中止遞歸

  2. 計算 D 的基尼指數,若是小於閾值則返回決策子樹,當前節點中止遞歸

  3. 計算當前節點現有的各個特徵的各個特徵值對 D 的基尼指數,選擇最小基尼指數最小的特徵 A 和對應的特徵值 a,並據此把數據集劃分爲兩部分 D1 和 D2,同時創建當前節點的左右節點,左節點數據集爲 D一、右節點爲 D2

  4. 對左右節點遞歸調用 1-3,生成決策樹

能夠發現 CART 處理多分類是很容易的。

 

CART 迴歸樹

和分類樹相比,連續特徵處理方法不一樣、決策樹創建後作預測的方式不一樣。其餘和 CART 分類樹相同

迴歸樹的度量目標是,對於任意劃分特徵 A,對應的任意劃分點 s 兩邊劃分紅的數據集 D1 和 D2,求出使 D1 和 D2各自集合的均方差最小、同時 D1 和 D2 的均方差之和最小所對應的特徵和特徵值劃分點:

其中,c1 爲 D1 的樣本輸出均值,c2 爲 D2 的樣本輸出均值。

構建完決策樹後,用最終葉子的均值或中位數來作預測。

 

CART 決策樹的剪枝

迴歸樹剪枝用均方差度量損失,分類樹剪枝用基尼指數度量損失。至關於一種正則化。

剪枝過程當中,對任意的一顆子樹 T, 參數爲 α 的總體損失函數爲:Cα(T) = C(T) + α|T|,其中 C(T) 是對訓練數據的預測偏差,|T| 爲葉節點個數,參數 α 衡量訓練數據的擬合程度與模型複雜度。對於固定的 α ,必定存在使 Cα(T) 最小的子樹(當 α 大的時候最優子樹 Tα 偏小,α 小的時候最優子樹 Tα 偏大。極端狀況 α = 0,總體樹最優;α = ∞,根節點構成的單節點樹最優)

 

對於總體樹 T0 任意的內部節點 t,以 t 爲單節點樹的損失爲 Cα(t) = C(t) + α ;以 t 爲根節點的子樹 Tt 的損失爲 Cα(Tt) = C(Tt) + α|Tt| 

當 α = 0 或充分小時,有不等式  Cα(Tt) < Cα(t) ;當 α 增大時,在某一個 α 有 Cα(Tt)  =  Cα(t) ;再增大時 Cα(Tt) > Cα(t)

只要 α = (C(t) - C(Tt))/ (|Tt| - 1), t 和 Tt 有相同的損失值,而 t 的節點更少,所以 t 比 Tt 更可取,對 Tt 剪枝。爲此,對 T0 中對每個內部節點 t ,計算 g(t) = (C(t) - C(Tt))/ (|Tt| - 1),表示剪枝後總體損失函數減小的程度。在 T0 中剪去 g(t) 最小的 Tt ,將獲得的子樹做爲 T1 ,同時將最小的 g(t) 設爲 α1。則 T1 爲區間[α1, α2) 的最優子樹。如此剪枝下去直到獲得根節點。在這個過程當中不斷增長 α 的值產生新的區間。

利用獨立的數據集進行交叉驗證,在 T0, T1, ..., Tn 中選出均方偏差或基尼指數最小的最優子樹,同時對應的 α 也就肯定了,即找到 Tα。

CART 決策樹剪枝流程:

  1. 設 k = 0, T = T0

  2. 設 α = ∞

  3. 自下而上地對各內部節點 t 計算 C(Tt) ,|Tt| ,以及 g(t) = (C(t) - C(Tt))/ (|Tt| - 1) ;α = min(α, g(t))

  4. 對 g(t) = α 的內部節點 t 進行剪枝,並對葉節點 t 以多數表決法決定類別(分類)或取值全部樣本輸出均值(迴歸)

  5. 設 k = k+1,αk = α , Tk = T

  6. 若是 T 不是由根節點及兩個葉節點構成的樹,則回到步驟2;不然令 Tk = Tn

  7. 交叉驗證法在子樹 T0, T1, ..., Tn 中選取最優子樹 Tα

 

CART 決策樹存在的問題:

  1. 每次分裂決策由一個最優的特徵線性組合來決定,可能會更合理(OC1)

  2. variance 比較大(樣本改動一點點,樹結構可能變化劇烈),能夠經過 bagging 來改善

  3. 尋找最優的決策樹是一個 NP hard 問題,通常是採用啓發式,但容易陷入局部最優,能夠用 ensemble 改善

相關文章
相關標籤/搜索