決策樹 (Decision Tree) 是一種有監督學習方法,通過特征和標簽構造一棵決策樹,學習特征之間的規則,以解決分類和回歸問題。
使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特征屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。
決策樹由以下 3 種元素構成:
- 根節點:包含樣本全集
- 內部節點:對應特征屬性測試
- 葉節點:決策結果 (標簽)
決策樹如何辨別好瓜和壞瓜?
(此圖摘自周志華西瓜書,本人白板手繪版)
以上面的西瓜為例,我們要如何辨別一個瓜是好瓜。特點是:紋理清晰,根蒂稍蜷,觸感青綠,恰好,你構建了一棵決策樹,立馬判斷這是好瓜還是壞瓜?
判斷步驟如下:
- 根據紋理清晰,已知是清晰,那么向左邊走,看第一步
- 接着,由紋理清晰到達第 2 層,由決策樹圖,我們可以看到,根蒂是稍蜷
- 接着到第 3 層,色澤的特征的青綠,由此,我們可以得出結論,這是一個好瓜。
根據上面的示例,我們可以很直觀的得到一個實例的類別判斷,只要告訴各個特征的具體值,決策樹的判定過程就相當於從樹中從根節點到某一個葉子節點的遍歷。每一步如何遍歷是由數據各個特征的具體特征屬性決定。
那么,基於上面的一棵樹,我們又有如下疑問,為什么根節點是紋理,而不是根蒂或者別的特征呢?
決策樹又是基於什么標准來選擇特征的?如果構建決策樹?
決策樹學習的 3 個步驟
基於上面的問題,為了構建一棵優質的決策樹,決策樹主要有3個步驟。
特征選擇,決策樹生成,決策樹剪枝
特征選擇
特征選擇也即選擇最優划分屬性,從當前數據的特征中選擇一個特征作為當前節點的划分標准。我們希望在不斷划分的過程中,決策樹的分支節點所包含的樣本盡可能屬於同一類,即節點的 “純度” 越來越高。而選擇最優划分特征的標准不同,也導致了決策樹算法的不同。
- 信息熵 (information entropy)
- 信息增益 (information gain)
- 信息增益率 (information gain ratio)
- 基尼指數 (Gini index)
決策樹基於樹結構進行決策,可做分類,也可進行回歸,有 ID3,C4.5,Cart 回歸樹。通常是遞歸選擇最優特征,並根據這個特征對訓練數據進行分割,使得對各個子數據集有最好的決策過程,決策樹希望往最快達到純度更高子集合方向發展。
決策樹生成
生成算法 | 划分標准 |
---|---|
ID3 | 信息增益 |
C4.5 | 信息增益率 |
CART | 基尼指數 |
ID3
ID3 以信息增益最大的特征作為節點進行划分,遞歸構建決策樹,直到所有特征被划分。
信息增益表示得知特征 X 的信息而使得類 Y 的信息的不確定性減少程度。表示划分前和划分后的熵的差值,差值越大,增益越大。而划分前的熵是確定的,划分后的調減熵越小,則最終的信息增益越大。
決策時總是希望往最快達純度更高子集合方向發展,而純度越高怎么解釋?純度高,特征之間的差異越大,越利於特征選擇。
具體方法
- 從根節點開始,對節點計算所有可能的特征的信息增益,選擇信息增益值最大的特征作為節點的划分特征;
- 由該特征的不同取值建立子節點;
- 再對子節點遞歸地調用以上方法,構建決策樹;
- 到所有特征的信息增益都很小或者沒有特征可以選擇為止,得到最終的決策樹
信息增益偏向於取值較多的特征
信息增益在面對類別較少的離散數據時效果較好,但是面對取值較多的特征時效果會很不如人意。
關於信息增益對取值較多特征的偏向性,我認為原因是:當特征的取值較多時,根據此特征划分得到的子集純度有更大的可能性會更高(對比與取值較少的特征),因此划分之后的熵更低,由於划分前的熵是一定的,因此信息增益更大,因此信息增益比較偏向取值較多的特征。
舉個較為極端的例子可能更好理解:如果特征 A 的取值能將每一個樣本都分到一個節點當中去的時候(如編號等特征),條件熵部分會為 0,這意味着二手手機靚號拍賣平台地圖該情況下的信息增益達到了最大值,故 ID3 算法一定會選擇特征 A。但是,顯然的,我們知道這個特征 A 顯然不是最佳選擇。
那么為什么信息增益率就能改善這種情況呢?先來看一下信息增益率的計算公式:
又叫特征 A 的內部信息,
其實像是一個衡量以特征 A 的不同取值將數據集 D 分類后的不確定性的度量。如果特征 A 的取值越多,那么不確定性通常會更大,那么
的值也會越大,而
會越小,相當於是在信息增益的基礎上乘上一個懲罰系數,即:
ID3 的特點
- 選擇信息增益大的特征建立決策樹,信息增益會偏向那些取值較多的特征(這也是C4.5采用信息增益率的原因)
- 只有樹的生成過程,容易過擬合
- 只能處理離散數據
- 不能處理缺失值
C4.5
對 ID3 進行改進,選用信息增益率進行特征選擇,遞歸構建決策樹。
C4.5 特點
- 對 ID3 進行改進,選用信息增益率進行特征選擇
- 能處理連續,離散類型
- 能處理缺失值
- 構造決策樹進行剪枝
Cart
CART (classification and regression tree) 分類回歸樹算法,既可用於分類也可用於回歸,在這一部分我們先主要將其分類樹的生成。
CART 分類樹
區別於 ID3 和 C4.5,CART 假設決策樹是二叉樹,內部節點特征的取值為 “是” 和 “否”,左分支為取值為“是”的分支,右分支為取值為”否“的分支。
這樣的決策樹等價於遞歸地二分每個特征,將輸入空間(即特征空間)划分為有限個單元。
CART 的分類樹用基尼指數來選擇最優特征的最優划分點,具體過程如下
- 從根節點開始,對節點計算現有特征的基尼指數,對每一個特征,例如 A,再對其每個可能的取值如 a,根據樣本點對 A=a 的結果的”是“與”否“划分為兩個部分,利用
-
在所有可能的特征 A 及該特征所有可能的取值 a 中,選擇基尼指數最小的特征及其對應的取值作為最優特征和最優切分點,然后根據最優特征和最優切分點,將數據集二分,生成兩個子節點。
-
對兩個子節點遞歸地調用上述步驟,直至節點中的樣本個數小於閾值,或者樣本集的基尼指數小於閾值,或者沒有更多特征后停止。
-
生成 CART 分類樹。
CART 回歸樹
回歸樹是可以用於回歸的決策樹模型,一個回歸樹對應着輸入空間(即特征空間)的一個划分以及在划分單元上的輸出值。
與分類樹不同的是,回歸樹對輸入空間的划分采用一種啟發式的方法,會遍歷所有輸入變量,找到最優的切分變量 j 和最優的切分點 s,即選擇第 j 個特征 xj 和它的取值 s 將輸入空間划分為兩部分,然后重復這個操作。
而如何找到最優的 j 和 s 是通過比較不同的划分的誤差來得到的。一個輸入空間的划分的誤差是用真實值和划分區域的預測值的最小二乘來衡量的,即
其中 f(xi) 是每個划分單元的預測值,這個預測值是該單元內每個樣本點的值的均值。
那么,j 和 s 的求解可以用以下式進行
R1(j,s) 和 R2(j,s) 是被划分后的兩個區域。
生成方法
- 選擇最優的切分變量 j 和 最優切分點 s,求解遍歷所有特征,對固定的特征掃描所有取值,找到使得上式達到最小值的 (j, s)
- 用選定的 (j, s) 划分區域,並確定該區域的預測值
- 繼續對兩個子區域繼續上面的步驟,直至滿足停止條件
- 生成回歸樹
決策樹剪枝
剪枝是為了避免決策樹模型過擬合,因為決策樹算法在學習過程中為了盡可能的正確分類訓練樣本,不停的對節點進行划分,因此這會導致整棵樹分支過多,也就導致了過擬合。
決策樹的剪枝有兩種:預剪枝和后剪枝
預剪枝 (pre-pruning)
預剪枝就是在構造決策樹的過程中,先對每個結點在划分前進行估計,若果當前結點的划分不能帶來決策樹模型泛化性能的提升,則不對當前結點進行划分並且將當前結點標記為葉結點。
后剪枝 (post-pruning)
后剪枝就是先把整顆決策樹構造完畢,然后自底向上的對非葉結點進行考察,若將該結點對應的子樹換為葉結點能夠帶來泛化性能的提升,則把該子樹替換為葉結點。