機器學習技法09: 決策樹(Decision Tree)



在這裏插入圖片描述

上一節課介紹了AdaBoost(Adaptive Boosting),AdaBoost通過拔靴法從數據集中抽樣,然後得到不同的假設函數 gg ,然後對這些假設函數線性組合,係數爲 αi\alpha_{i}。這樣,通過組合多條水平或者豎直的分類超平面可以得到複雜的分類超平面,從而實現很好的分類能力。本節課介紹有條件的集成學習算法——決策樹(Decision Tree)。

9.1 Decision Tree Hypothesis

一個決策樹的簡單例子,如下:
在這裏插入圖片描述
決策樹中有三個元素:節點,條件,樹葉;分別對應圖中的菱形框,箭頭,圓圈。其中,條件用 qt(x)q_{t}(x) 表示,樹葉用 gt(x)g_{t}(x) 表示。決策樹的假設函數爲 G(x)G(x) 。這個表達式不夠直觀,下面換一種表達式描述決策樹:
在這裏插入圖片描述
這個表達式的思想是將決策樹在第一個節點處分開,拆分成不同的分支,在該例中,C=3C = 3 ,即從第一個節點拆成了三個子樹(分支)。 其中每個分支對應一個小的融合模型,其假設函數爲 Gc(x)G_{c}(x)

決策樹是一個很有用的模型,其描述了整個做決定的過程,這個過程與人類的決策過程有類似的地方。決策樹的優點有三個,第一個是決策樹的可解釋性非常高。也正是這個原因,使得其在醫藥、商業等領域的應用非常廣泛。其次,決策樹簡單且容易描述。第三點是決策樹非常有效率,無論是訓練還是推理過程。當然,決策樹也有其缺點。第一個缺點是理論保證比較少,即在某些問題中,爲什麼做得好可能很難解釋清楚。第二是對於初學者來說,問題建模之初選擇參數比較複雜。第三個是決策樹幾乎沒有單一的代表性算法。
在這裏插入圖片描述


習題1:
在這裏插入圖片描述


9.2 Decision Tree Algorithm

決策樹算法的僞代碼如下圖所示:
在這裏插入圖片描述
其算法的流程爲:

  • 判斷是否達到終止條件,如果達到則返回基本的假設函數g(x)g(x);如果沒有則執行else部分內容;
  • 首先,學習分支的劃分標準 b(x)b(x)
  • 然後將數據集 DD 劃分爲 CC 部分,Dc={(xn,yn):b(xn)=c}D_c= \{(x_n,y_n) : b(x_n) = c \}
  • 根據不同的子數據集 DcD_{c} 求解子樹的假設函數 GcG_{c}
  • 然後將這些假設函數進行融合,變爲決策樹的假設函數 G(x)G(x)

由上述僞代碼可知,決策樹算法的關鍵有四點:

  • 分支數量的確定;
  • 分支的劃分標準;
  • 遞歸終止條件;
  • 基本假設函數的求解。

下面介紹一種常用的決策樹算法,Classification and Regression Tree (C&RT)。該算法有兩個簡單的設定:分支數 C=2C=2,即二叉樹(binary tree);每個分支最後的葉子數 gt(x)g_{t}(x) 爲一個常數。按照最小化目標函數 EinE_{in} ,對於二分類或多分類問題,gt(x)g_{t}(x) 選取佔比最多的一類 yny_n ;對於迴歸問題,gt(x)g_{t}(x) 對所有預測值 yny_n 取平均。
在這裏插入圖片描述
對於決策樹的基本演算法流程,C&RT還有一些簡單的設定。首先,C&RT分支個數 C=2C=2,一般採用decision stump劃分數據。每次在一個維度上,只對一個特徵(feature)將數據一分爲二,左子樹和右子樹,分別代表不同的類別。然而,如何切割才能讓數據劃分得最好,即錯誤率最低?C&RT中使用純淨度(purifying)來選擇最好的 decision stump。purifying的核心思想是每次切割都儘可能讓左子樹和右子樹中同類樣本佔得比例最大或者都很接近(regression),這樣的數據,使用常數進行預測,則錯誤率會最低。比如分類問題,如果左子樹全是正樣本,右子樹全是負樣本,那麼它的純淨度就很大,說明該分支效果很好。分支條件 b(x)b(x) 的選擇標準爲:

在這裏插入圖片描述
選擇最好的decision stump的關鍵有兩個:一個是分支的純淨度(purifying)越大越好,此處使用不純淨度(impurity)表示,即impurity越小越好;另一個是左右分支純淨度所佔的權重,權重大小由該分支的數據量決定,分支包含的樣本個數越多,則所佔權重越大,分支包含的樣本個數越少,則所佔權重越小。上式中,$|D_c \ with \ h| $ 表示分支 cc 所佔的權重。分支條件 b(x)b(x) 類似於 error function,使用impurity代替purifying的也正是這個原因,選擇最好的decision stump,最小化所有分支的不純淨度,使 b(x)b(x) 越小越好。不純淨度的函數表示形式爲:
在這裏插入圖片描述
其對於迴歸和分類問題有不同的表示形式,但都與原來所學的輸入誤差 EinE_{in} 的表示形式類似。上式中,y\overline{y} 表示對應分支下所有預測值 yny_n 的平均值,yy^* 表示對應分支下所有預測值 yny_n 中佔比例最大的類別。如果只考慮純度最大的分支,其分類誤差可以表示爲,上圖中右下角的公式;若果將所有分支的純度都考慮在內,可以使用基尼係數(Gini index)表示誤差,這樣可以使得decision stump的分割更準確。一般來說,基尼係數表示的誤差更適合處理分類問題,迴歸誤差更適合處理迴歸問題。

上面已經介紹了C&RT算法的三個關鍵點,還剩C&RT的終止條件。其終止條件有兩種情形:

  • 各個分支下的預測值yny_n 都屬於同一類別,即不純度爲0,即該分支已經達到最佳的分類精度;
  • 某一特徵下,所有的 xnx_n 都相同,無法再進行劃分,即沒有decision stump。

達到終止條件後,C&RT就變爲完全生長樹(fully-grown tree),每次一分爲二,具有恆定的葉子(各分支最終的假設函數 gt(x)g_t(x))數,這些葉子是通過最小化不純度產生的雙分支。


習題2:
在這裏插入圖片描述


9.3 Decision Tree Heuristics in C&RT

在這裏插入圖片描述

經過推導,C&RT算法的僞代碼如上圖所示。其通過二叉樹,最後返回一個常數,可以很輕易的處理分類、迴歸以及多分類問題。

最終得到的fully-grown tree,經過多次切分,可以使得 Ein=0E_{in} = 0 ,根據以前所學,可能會導致 VC-Dimention 非常大,從而無法控制算法的複雜度,導致過擬合。這在C&RT算法中,當輸入數據差異很大或者存在噪聲時,隨着劃分次數增加,數據量越來越少,某些分支很可能是過擬合的分支,也就是說很容易造成過擬合。其解決的方法是通過正則化來修剪決策樹過擬合的分支。

衡量決策樹算法複雜度的方法是衡量有多少個樹葉。那麼此時的目標就變爲 EinE_{in} 要相對較低,同時樹葉的數目還要少,這樣就可以達到正則化,緩解過擬合的目的。
在這裏插入圖片描述

上式是一個熟悉的正則化表達式,設想,首先需要將所有樹的 Ein(G)E_{in}(G) 和複雜度 Ω(G)\Omega(G) 都算出來,然後引入拉格朗日乘子 λ\lambda 控制正則化的程度。可以將其稱爲決策樹修剪(prun)。但是很難通過遞歸的方法求解出所有可能的假設函數 GG ,通常的做法是使用一個由 C&RT算法計算得到的樹,嘗試移除一片葉子,然後比較去除葉子的決策樹那個性能最好,即 Ein(G)E_{in}(G) 最小。比如得到一個有10片葉子的樹,那麼去除一個葉子之後,得到一個具有9片葉子的樹;去除兩個葉子之後,得到一個具有8片葉子的樹,以此類推…這些樹的假設函數使用 G(i)G^{(i)} 表示。其表達式如上圖所示。此時得到這些去除不同數量葉子的樹,可以組成一個假設空間,用假設空間裏的這些假設函數,進行正則化。這樣,就可以只使用一個完全長成樹來做正則化,而不必找出所有的樹進行正則化。以上就是C&RT算法選擇一個具有正則化同時效果比較好的樹的方法。還有一個參數 λ\lambda 需要計算,可以通過驗證(validation)的方法進行求解。

下面介紹決策樹的其它特性,在之前的介紹中,輸入輸出特徵都是數字,但是在現實世界中所面臨的問題不一定都是數字;那麼對於不是數字的輸入,比如多類特徵(categorical features),決策樹應該如何處理呢?對於非數字輸入,其影響的是決策樹的劃分過程,可以使用決策子集(decision subset)的方法解決,即對不同類別特徵進行是與否的劃分。

在這裏插入圖片描述
此外,還有一種意外情況需要考慮,那就是某些樣本中存在缺失的特徵時,應該如何處理。一種常用的方法是surrogate branch,即尋找與該特徵相似的替代特徵。做法是在決策樹訓練的時候,找出與該特徵相似的特徵,如果替代特徵與原特徵切割的方式和結果類似,則表明二者是相似的,就把該替代特徵存儲起來。當預測時遇到特徵缺失時,可以用替代特徵判斷和選擇分支。
在這裏插入圖片描述


習題3:
在這裏插入圖片描述


9.4 Decision Tree in Action

通過一個簡單的實例看一下C&RT算法的處理流程。

輸入樣本的分佈爲:
在這裏插入圖片描述
使用C&RT進行切分:
在這裏插入圖片描述

經過以上四步切分,每個分支的不純淨度接近爲0,已經無法繼續切分。此時表明已經滿足了迭代終止條件,這時候就可以返回各葉子的假設函數 gt(x)g_t(x),構成子樹,然後再整合爲最終的完全成長樹。
在這裏插入圖片描述
最終結果:
在這裏插入圖片描述

在該輸入空間,C&RT和AdaBoost算法的分類結果如下:
在這裏插入圖片描述

可以看出C&RT切割之後,每次切割都是對剩餘的輸入空間進行切割;而AdaBoost每次切割都是對完整的輸入空間進行切割。

對比一下更復雜的輸入空間,C&RT和AdaBoost算法的情況:
在這裏插入圖片描述

可以看出C&RT算法更有效率。其特點主要有以下幾點:
在這裏插入圖片描述

此外,還有許多其它決策樹算法,比如C4.5,C5.0等,基本處理流程大同小異,只是在某些節點處理上稍有不同。


習題4:
在這裏插入圖片描述


Summary

本節課介紹了決策樹的一種基本算法 C&RT,從其假設空間開始介紹,其不同的條件或者說不同的分支生成的樹葉,決定了其有很多個假設函數 g(x)g(x) ,決策樹通過對這些假設函數融合,組成更好的集成學習模型。其可以高效快速地對目標問題進行建模,同時還可以處理特徵丟失的情況。
在這裏插入圖片描述


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