【數據科學系統學習】機器學習算法 # 西瓜書學習記錄 [9] 決策樹

本篇內容爲西瓜書第 4 章決策樹 4.14.24.3 的內容:算法

  • 4.1 基本流程
  • 4.2 劃分選擇
  • 4.3 剪枝處理

如移動端沒法正常顯示文中的公式,右上角跳至網頁便可正常閱讀。函數


決策樹 (decision tree) 是一種基本的分類與迴歸方法。在分類問題中,表示基於特徵對實例進行分類的過程。決策樹學習一般包括 3 個步驟:特徵選擇、決策樹的生成和決策樹的修剪。這些決策樹的思想主要來源於由 Quinlan 在1968 年提出的 ID3 算法和 1993 年提出的 C4.5算法,以及由 Breiman 等人在 1984 年提出的 CART 算法。學習

決策樹是一種樹型結構,其中每一個內部結點表示在一個屬性上的測試,每一個分支表明一個測試輸出,每一個葉結點表明一種類別。以下圖所示,就是判斷一顆瓜是否爲好瓜的一顆決策樹。測試

clipboard.png

決策樹學習採用的是自頂向下的遞歸方法,其基本思想是以信息熵爲度量構造一棵熵值降低最快的樹,到葉子結點處的熵值爲零,此時每一個葉結點中的實例都屬於同一類。ui

這具體是說什麼意思呢?咱們來看下面的內容。spa

基本流程

通常的,一棵決策樹包含一個根節點,若干個內部結點和若干個葉結點;葉結點對應於決策結果,其餘每一個結點則對應於一個屬性測試;每一個結點包含的樣本集合根據屬性測試的結果被劃分到子結點中;根結點包含樣本全集。從根結點到每一個葉結點的路徑對應了一個斷定測試序列。3d

決策樹學習的目的是爲了產生一棵泛化能力強,即處理未見示例能力強的決策樹,其基本流程遵循簡單且直觀的「分而治之」策略,以下圖所示:code

clipboard.png


能夠認爲,所謂的決策樹就是信息熵不斷降低的一個過程。好比若葉子結點是徹底肯定的一個類別,它的信息熵爲 0。這裏說的熵減小是指葉子結點信息熵的平均值(按樣本個數加權取平均值)必定低於父結點的熵。orm

在信息論與機率統計中, (entropy) 是表示隨機變量不肯定性的度量。設 $X$ 是一個取有限個值的離散隨機變量,其機率分佈爲遞歸

$$ P(X=x_i)=p_i,\quad i=1,2,···,n $$

則隨機變量 $X$ 的熵定義爲

$$ H(X)=-\sum_{i=1}^{n}p_ilogp_i $$

由定義可知,熵只依賴於 $X$ 的分佈,而與 $X$ 的取值無關,因此也可將 $X$ 的熵記做 $H(p)$,即

$$ H(p)=-\sum_{i=1}^{n}p_ilogp_i $$

當隨機變量只取兩個值,例如 1,0 時,即 $X$ 的分佈爲

$$ P(X=1)=p,\quad P(X=0)=1-p,\quad 0\leq p\leq 1 $$

熵爲

$$ H(p)=-plog_2p-(1-p)log_2(1-p) $$

下面咱們畫圖來講明。將上述公式經過下列代碼繪圖:

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> eps = 0.00001
>>> p = np.linspace(eps, 1-eps, 100)
>>> H = -p * np.log(p) - (1-p) * np.log(1-p)
>>> plt.plot(p, H)
[<matplotlib.lines.Line2D object at 0x113dc89e8>]
>>> plt.show()

獲得熵 $H(p)$ 隨機率 $p$ 變化的曲線以下圖所示:

clipboard.png

當 $p=0$ 或 $p=1$ 時 $H(p)=0$,隨機變量徹底沒有不肯定性。當 $p=0.5$ 時,熵取值最大,隨機變量不肯定性最大。

劃分選擇

決策樹學習的生成算法

創建決策樹的關鍵,即在當前狀態下選擇哪一個屬性做爲分類依據。根據不一樣的目標函數,創建決策樹主要有如下三種算法:

  • ID3:信息增益
  • C4.5:信息增益率
  • CART:基尼指數

下面給出信息增益信息增益率基尼係數的定義(來自李航的《統計學習方法》),最後用一個例子來講明。

在給出定義前,先對一些符號進行說明:

  • $D$:訓練數據集
  • $|D|$:樣本容量,即樣本個數
  • $C_k$:設有 $K$ 個類 $C_k$,$k=1,2,···,K$
  • $|C_k|$:屬於類 $C_k$ 的樣本個數,即 $\sum_{k=1}^{K}|C_k|=|D|$
  • $A$:設特徵 $A$ 有 $n$ 個不一樣的取值 ${a_1,a_2,···,a_n}$,根據特徵 $A$ 的取值將 $D$ 劃分爲 $n$ 個子集 $D_1,D_2,···,D_n$
  • $|D_i|$:$D_i$ 的樣本個數,即 $\sum_{i=1}^{n}|D_i|=|D|$
  • $D_{ik}$:記子集 $D_i$ 中屬於類 $C_k$ 的樣本的集合爲 $D_{ik}$,即 $D_{ik}=D_i \cap C_k$
  • $|D_{ik}|$:$D_{ik}$ 的樣本個數
  • $H(D)$:經驗熵

$$ H(D)=-\sum_{k=1}^{K}\frac{|C_k|}{D}log_2\frac{|C_k|}{D} $$

  • $H(D | A)$:經驗條件熵

$$ H(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|} $$

當熵和條件熵中的機率由數據估計(特別是極大似然估計)獲得時,所對應的熵與條件熵分別稱爲 經驗熵條件經驗熵

特徵選擇的準則

特徵選擇是決定用哪一個特徵來劃分特徵空間,即如何選擇最優劃分屬性。要生成一棵樹,就要知道從當前結點上,如何劃分造成下面的結點,能夠說,這是作決策樹的意義、目的和難點。一般特徵選擇的準則就是上面提到的信息增益或信息增益比,還有基尼指數。

定義 5.2(信息增益)
特徵 $A$ 對訓練數據集 $D$ 的信息增益 $g(D, A)$,定義爲集合 $D$ 的經驗熵 $H(D)$ 與特徵 $A$ 給定條件下 $D$ 的經驗條件熵 $H(D|A)$ 之差,即

$$ g(D|A)=H(D)-H(D|A) $$

通常地,熵 $H(Y)$ 與條件熵 $H(Y|X)$ 之差稱爲互信息 (mutual information)。決策樹學習中的信息增益等價於訓練數據集中類與特徵的互信息。

定義 5.3(信息增益比)
特徵 $A$ 對訓練數據集 $D$ 的信息增益比 $g_R(D, A)$ 定義爲其信息增益 $g(D, A)$ 與訓練數據集 $D$ 關於特徵 $A$ 的值的熵 $H_A(D)$ 之比,即

$$ g_R(D, A)=\frac{g(D|A)}{H_A(D)} $$

其中,$H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}$,$n$ 是特徵 $A$ 取值的個數。

定義 5.4(基尼係數)
分類問題中,假定有 $K$ 個類,樣本點屬於第 $k$ 類的機率爲 $p_k$,則機率分佈的基尼指數定義爲

$$ Gini(p)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 $$

對於給定的樣本集合 $D$,其基尼指數爲

$$ Gini(D)=1-\sum_{k=1}^{K} \left(\frac{|C_k|}{|D|} \right)^2 $$

這裏,$C_k$ 是 $D$ 中屬於第 $k$ 類的樣本子集,$K$ 是類的個數。

若是樣本集合 $D$ 根據特徵 $A$ 是否取某一可能值 $a$ 被分割成 $D_1$ 和 $D_2$ 兩部分,即

$$ D_1= \{ (x,y)\in D|A(x)=a \},\quad D_2=D-D_1 $$

則在特徵 $A$ 的條件下,集合 $D$ 的基尼指數定義爲

$$ Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) $$

基尼指數 $Gini(D)$ 表示集合 $D$ 的不肯定性,基尼指數 $Gini(D,A)$ 表示經 $A=a$ 分割後集合 $D$ 的不肯定性。

直觀來講,$Gini(D)$ 反映了從數據集 $D$ 中隨機抽取兩個樣本,其類別標記不一致的機率。所以,$Gini(D)$ 越小,則數據集 $D$ 的純度越高。


下面選取了一個例子(來自李航的《統計學習方法》)來講明上述公式的運用,以及生成決策樹的計算過程。

clipboard.png
clipboard.png
clipboard.png
clipboard.png
clipboard.png
clipboard.png

以信息增益爲準則來選擇劃分屬性爲例,簡單的解釋以下:

在本例中,共有 15 個樣本,有「年齡」「有工做」「有本身的房子」「信貸狀況」共 4 個特徵,這裏爲了敘述方便,分別記作 $A_1,A_2,A_3,A_4$。最後一列類別表示是否贊成貸款,有「是」「否」兩個值,記作 $Y$。

  • 計算$H(Y)$,即經驗熵 $H(D)$
  • 計算 $A_1$ 給定的條件下隨機變量 $Y$ 的條件熵 $H(Y|A_1)$,即經驗條件熵 $H(D|A_1)$

爲了計算 $H(D|A_1)$,又特徵「年齡」有 3 個可能值:青年、中年、老年,用不嚴格的記號來講明下列過程:
$A_1=青年(5)$:$\frac{5}{15}*H(D|A_1=青年)$
$A_1=中年(5)$:$\frac{5}{15}*H(D|A_1=中年)$
$A_1=老年(5)$:$\frac{5}{15}*H(D|A_1=老年)$
$H(D|A_1)=H(D|A_1=青年)+H(D|A_1=中年)+H(D|A_1=老年)$

  • 計算特徵 $A_1$ 對數據集 $D$ 的信息增益

$g(D,A_1)=H(D)-H(D|A_1)$

同理,分別可獲得 $g(D,A_2),g(D,A_3),g(D,A_4)$。最後比較各特徵的信息增益值,選擇其值最大的那個特徵做爲最優特徵。

根據信息增益準則的特徵選擇方法是:對訓練數據集(或子集)$D$,計算其每一個特徵的信息增益,並比較它們的大小,選擇信息增益最大的特徵。

以上過程即解釋了信息增益的算法

clipboard.png
clipboard.png

總的來講,對於分類問題而言,若根據信息增益比和基尼指數來選擇特徵,也是相似的想法。對於迴歸問題,則能夠用計算均方偏差來進行閾值劃分。


經過上述例子,咱們對如何用算法生成決策樹有了一個大體的瞭解,下面咱們給出三種主要的算法步驟。

ID3 算法:
clipboard.png
clipboard.png

C4.5 的生成算法:

clipboard.png

CART 生成算法:

clipboard.png
clipboard.png


剪枝處理

剪枝 (pruning) 是決策樹學習算法對付「過擬合」的主要手段。其基本策略有預剪枝後剪枝。這裏主要介紹的是後剪枝。決策樹的剪枝每每經過極小化決策樹總體的損失函數或代價函數來實現。以下圖所示:

clipboard.png

上述的三種決策樹的剪枝過程算法相同,區別僅是對於當前樹的評價標準不一樣。

剪枝整體思路

由徹底樹 $T_0$ 開始,剪枝部分結點獲得 $T_1$,再次剪枝部分結點獲得 $T_2$···直到僅剩樹根的樹 $T_k$,在驗證數據集上對這 $k$ 個樹分別評價,選擇損失函數最小的樹 $T_\alpha$。

剪枝算法

對於給定的決策樹 $T_0$:
$\quad$計算全部內部結點的剪枝係數
$\quad$查找最小剪枝係數的結點,剪枝得決策樹 $T_k$;
$\quad$重複以上步驟,直到決策樹 $T_k$ 只有 1 個結點;
$\quad$獲得決策樹序列 $T_0,T_1,T_2,···,T_k$;
$\quad$使用驗證樣本集選擇最優子樹。

使用驗證集作最優子樹的標準,可使用評價函數:

$$ C(T)=\sum_{t}^{|T|} N_t·H_t(T) $$

剪枝係數的肯定

這裏的剪枝係數指的是決策樹學習的損失函數中的參數 $\alpha$。剪枝,就是當 $\alpha$ 肯定時,選擇損失函數最小的模型,即損失函數最小的子樹。

下面咱們來給出決策樹學習的損失函數。根據評價函數(因爲該評價函數越小越好,因此能夠稱之爲「損失函數」):

$$ C(T)=\sum_{t}^{|T|} N_t·H_t(T) $$

其中,樹 $T$ 的葉結點個數爲 $|T|$。$t$ 是樹 $T$ 的葉結點,該葉結點有 $N_t$ 個樣本點,其中 $k$ 類的樣本點有 $N_{tk}$ 個,$k=1,2,···,K$。$H_t(T)$ 爲葉結點 $t$ 上的經驗熵

$$ H_t(T)=\sum_{k}\frac{N_{tk}}{N_t}log{\frac{N_{tk}}{N_t}} $$

$\alpha \ge0$ 爲參數,葉結點越多,決策樹越複雜,損失越大。則決策樹學習的損失函數能夠定義爲

$$ C_\alpha(T)=C(T)+\alpha|T| $$

用 $C(T)$ 表示模型對訓練數據的預測偏差,即模型與訓練數據的擬合程度,$|T|$表示模型複雜度,參數 $\alpha$ 控制二者之間的影響。其中

$$ C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t} $$

當 $\alpha$ 值肯定時,子樹越大,每每與訓練數據的擬合越好,可是模型的複雜度就越高;相反,子樹越小,模型的複雜度就越低,可是每每與訓練數據的擬合很差。損失函數正好表示了對二者的平衡。

下面咱們來描述計算 $\alpha$ 過程。在這個過程當中,計算子樹的損失函數。對固定的 $\alpha$,必定存在使損失函數 $C_\alpha(T)$ 最小的子樹,將其表示爲 $T_\alpha$,$T_\alpha$ 在損失函數 $C_\alpha(T)$ 最小的意義下是最優的,且這樣的最優子樹是惟一的。

當 $\alpha$ 大的時候,最優子樹 $C_\alpha(T)$ 偏小;當 $\alpha$ 小的時候,最優子樹 $C_\alpha(T)$ 偏大。極端狀況,當 $\alpha=0$ 時,未剪枝的決策樹損失最小。當 $\alpha=+\infty$ 時,單根結點的決策樹損失最小。

具體地,從總體樹 $T_0$ 開始剪枝,假定當前對以 $t$ 爲根的子樹剪枝。剪枝後,只保留 $t$ 自己而刪掉全部的葉子考察以 $t$ 爲根的子樹。則以 $t$ 爲單結點樹,即剪枝後的損失函數是:

$$ C_\alpha(t)=C(t)+\alpha $$

以 $t$ 爲根結點的子樹 $T_t$ ,即剪枝前的損失函數是:

$$ C_\alpha(T_t)=C(T_t)+\alpha|T_t| $$

令兩者相等,求得:

$$ \alpha=\frac{C(t)-C(T_t)}{|T_t|-1} $$

此時,$T_t$ 與 $t$ 有相同的損失函數值,而 $t$ 的結點少,所以 $t$ 比$T_t$ 更可取,對 $T_t$ 進行剪枝。其中,$\alpha$ 稱爲結點 $t$ 的剪枝係數。


不足之處,歡迎指正。

$$$$

相關文章
相關標籤/搜索