機器學習-決策樹
決策樹
決策樹
基本介紹
決策樹是一個樹結構,它既可以是二叉樹,也可以是多叉樹。
它的每一個非葉子節點代表對某一個屬性的測試,而每一個葉子節點存放具體的類別。
它的決策從根節點開始,根據分支節點來測試屬性並進入到樹的下層相應的分支,直到抵達葉子節點得到類別。
決策樹是基於樹結構進行決策的,這符合我們對問題的決策方案,可解釋性較強。
當我們判斷一個人能不能償還債務的時候,我們需要關注這個人的收入情況,這個人的家庭的財產狀況(例如是否有房子可以抵押)等等。
在經過一系列的屬性判斷決策之後,我們會得到判斷他能不能償還債務。
優點:
模型可以直接視覺化,可解釋性強,既可以用於分類也可以用於迴歸,演算法複雜度低,既可以處理離散屬性,也可以處理連續性屬性。
缺點:樹的結果不宜過度複雜,容易過擬合。可以限制樹的深度,葉子節點樣本的數量等剪枝策略來緩解過擬合。
隨機森林中使用多顆決策樹以及隨機選擇屬性的方式來降低過擬合的風險。
不過這個屬於bagging的範疇,後面會單獨出一章來講解bagging和boosting的相關內容。
引用一個例子,來源(2)
先看一個根據房產,婚姻以及年收入來判斷是否能夠償還債務的資料表格:
通過該資料,構建的決策樹如下:
根據構建的決策樹,對於新來的樣本就可以順著決策樹的的分支來確定他是否可以償還債務。
訓練
決策樹的訓練過程就是樹以及分支節點測試條件進行構建的過程。
我們首先從根節點開始,採用貪心演算法來選擇某一個屬性的某一種值進行劃分成幾(二叉樹的話為2)個部分,形成它的子分支;對於它的子分支,遞迴進行此劃分操作。
這引出兩個問題:(1) 如何劃分屬性,(2)如何選擇屬性
如何劃分屬性
對於一個人的收入狀況,如果是用連續的值表示,那我們該如何對收入進行劃分呢?如果是用離散的”高”,”中等”或者”低”,該如何劃分呢?具體請參見Section屬性劃分。
如何選擇屬性
回顧我們的樹構建過程。它從根節點貪心的選擇一個屬性的最優劃分,然後劃分成子分支。那麼對屬性或者劃分進行貪心選擇的目的是什麼呢?
讓它的各個子分支儘可能的”純”,或者說使它的各個子分支的所屬類別儘可能的相同。
這很容易引出一個問題,如何定義一個分支的純度呢?具體請參見Section純度的界定,Section貪心選擇
屬性劃分
屬性的取值離散,且不要求是二叉樹,可以直接用屬性的各個值形成不同的分支。例如一個人的收入屬性有”高”,”中等”和”低”三種類別,那麼按照收入劃分的話,就可以直接劃分為3個分支
屬性的取值離散,且要求是二叉樹,那就需要把屬性的取值劃分成兩個集合,並分別測試哪種劃分效果最好。例如收入屬性可以嘗試”高,中等”和”低”這種劃分
屬性的取值連續,且要求是二叉樹,這時候需要選擇連續值的某一個值point為分界點,以
>point >point和<=point <=point分成兩部分。為了選取point,可以將全部樣本的這列屬性的值排序,然後不斷嘗試連續的兩個值的中值作為分界點。屬性的取值連續,且不要求是二叉樹,很少會有,可以採用將連續的值域範圍切成幾個塊,然後每個塊分到一個分支中。
“純度”的界定
本節主要包括純度的定義,以及經過某一次劃分後純度提升的”“量。這個”量”有多種衡量的標準,從而有了以下三種演算法:
ID3演算法
對於一個資料集合,如何定義它的”純度”呢?回憶上一章中”熵”的定義,熵衡量了傳輸資訊所需要的最小的資料量。資訊越純,它含有的資訊量越小。因此我們可以直接用熵
令
其中
有了純度的定義,對於給定的一個劃分,我們來計算經過這次劃分後它的純度的度量。
我們假定通過屬性A進行劃分,那麼劃分後的熵為
其中
利用劃分前的熵
C4.5演算法
ID3演算法有一個明顯的不足,它一般會優先選擇有較多屬性值得feature,即
例如資料集合D有一列屬性叫
我們獲得了最大的資訊增益。然而,我們知道
C4.5演算法就是為了克服這種多值屬性的不足而出現的。如同我們的預期,我們可以對這樣的值比較多的屬性增加懲罰項,我們的懲罰項用分裂資訊(split
information)來衡量,它記錄的是各個子分支中樣本數量的純度。即
根據熵的概念,我們可以知道
有了懲罰項,很顯然,它應該跑到資訊增益的分母上來進行懲罰,從而我們有資訊增益率
CART演算法
ID3和C4.5演算法中在使用一個屬性後,
這個屬性就不再被使用了,這種快速切割的方式會影響演算法的效果。CART是一顆二叉樹,對於每一個分支節點都會有兩個孩子。CART使用的表述純度的概念的是Gini值,同樣是資料越純,Gini值越小。
劃分後的基尼係數為
從而它的增益為
貪心選擇
針對上述的每一個演算法,樹在構造的時候,會遍歷候選屬性的每一個劃分,然後選擇能夠最大化增益的屬性以及劃分。
在實際演算法執行的時候,並不需要每次都計算增益,由於在進行劃分之前的純度值是固定的,採用不同的劃分後的純度值是不定的,我們最大化資訊增益相當於最小化劃分後的純度值。
對應於上述的三種演算法,相當於最小化
以及
決策樹演算法
我們引用一個書中的演算法來解釋一下決策樹的構造過程。
步驟
當前節點已經足夠的純,全部屬於一個類別,
步驟
步驟
步驟
步驟
額外注意事項
剪枝
剪枝有前剪枝和後剪枝,演算法C4.5中第
缺失值
有些樣本有缺失值,一種方法是直接刪除樣本,但會損失樣本資訊,第二種方法是對缺失的樣本補充其均值等,第三種方法是概率化樣本,引用知乎的一段話:
其實缺失值問題可以從三個方面來考慮1.
在選擇分裂屬性的時候,訓練樣本存在缺失值,如何處理?假如你使用ID3演算法,那麼選擇分類屬性時,就要計算所有屬性的熵增(資訊增益,Gain)。假設10個樣本,屬性是a,b,c。在計算a屬性熵時發現,第10個樣本的a屬性缺失,那麼就把第10個樣本去掉,前9個樣本組成新的樣本集,在新樣本集上按正常方法計算a屬性的熵增。然後結果乘0.9(新樣本佔raw樣本的比例),就是a屬性最終的熵。2.
分類屬性選擇完成,對訓練樣本分類,發現屬性缺失怎麼辦?比如該節點是根據a屬性劃分,但是待分類樣本a屬性缺失,怎麼辦呢?假設a屬性離散,有1,2兩種取值,那麼就把該樣本分配到兩個子節點中去,但是權重由1變為相應離散值個數佔樣本的比例。然後計算錯誤率的時候,注意,不是每個樣本都是權重為1,存在分數。3.
訓練完成,給測試集樣本分類,有缺失值怎麼辦?這時候,就不能按比例分配了,因為你必須給該樣本一個確定的label,而不是薛定諤的label。這時候根據投票來確定,或者填充缺失值。
分類和迴歸
實際應用中,決策樹有分類樹和迴歸樹兩種,前者用於預測類別,例如是否健康,能否償還貸款,後者用於預測實數值,例如溫度,健康程度等。
分類樹:
樹在構建過程中或者按照閾值設定,或者按照類別將樣本劃分到多個子分支中,直到某一個分支中的所有樣本屬於同一個類別,即最純,或者屬性已經用完了,或者達到預先設定的條件,這個分支就停止劃分了,併成為葉子節點,它的類別採用的是多人投票法,即哪種類別最多,即為那個類別。
迴歸樹:
迴歸樹與分類樹類似,不過由於預測的值為連續值,沒有類別的概念,也就是說我們無法計算分支節點的純度,因此我們不再使用最大化資訊增益來作為劃分選擇,而是採用最小化均方誤差(回想前面所講的線性迴歸中的公式)
其中
我們對於每一個分支節點都計算了一個預測值,它為這個分支節點所有預測值的平均值。
分枝時窮舉每一個feature的每個閾值找最好的分割點,以最小化均方誤差。當進行預測的時候,以該節點所有人的平均年齡作為該節點的預測值。
參考資料
https://www.cnblogs.com/wxquare/p/5379970.html
https://www.cnblogs.com/bourneli/p/2961568.html
http://blog.csdn.net/dark_scope/article/details/13168827
https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html
相關文章
- 機器學習:決策樹機器學習
- 機器學習之決策樹機器學習
- 機器學習——決策樹模型機器學習模型
- 機器學習筆記--決策樹機器學習筆記
- Python機器學習:決策樹001什麼是決策樹Python機器學習
- 機器學習Sklearn系列:(三)決策樹機器學習
- 機器學習|決策樹-sklearn實現機器學習
- 機器學習筆記(四)決策樹機器學習筆記
- 機器學習之決策樹演算法機器學習演算法
- 機器學習 Day 9 | 決策樹基礎機器學習
- 【機器學習】--決策樹和隨機森林機器學習隨機森林
- 機器學習——決策樹模型:Python實現機器學習模型Python
- 圖解機器學習 | 決策樹模型詳解圖解機器學習模型
- 春節不斷電之機器學習 —— 決策樹機器學習
- 【Python機器學習實戰】決策樹和整合學習(二)——決策樹的實現Python機器學習
- 機器學習之使用sklearn構造決策樹模型機器學習模型
- 機器學習經典演算法之決策樹機器學習演算法
- 機器學習之決策樹原理和sklearn實踐機器學習
- 機器學習之決策樹與隨機森林模型機器學習隨機森林模型
- 機器學習之決策樹在sklearn中的實現機器學習
- 機器學習之 決策樹(Decision Tree)python實現機器學習Python
- [機器學習&資料探勘]機器學習實戰決策樹plotTree函式完全解析機器學習函式
- 【機器學習】實現層面 決策樹 並用graphviz視覺化樹機器學習視覺化
- 決策樹模型(3)決策樹的生成與剪枝模型
- 《機器學習Python實現_09_02_決策樹_CART》機器學習Python
- 機器學習之決策樹ID3(python實現)機器學習Python
- 機器學習——線性迴歸-KNN-決策樹(例項)機器學習KNN
- 機器學習 - 決策樹:技術全解與案例實戰機器學習
- 機器學習西瓜書02:第四章,決策樹。機器學習
- 機器學習:如何構造一個簡單的決策樹機器學習
- 決策樹示例
- 【Python機器學習實戰】決策樹和整合學習(一)Python機器學習
- 決策樹在機器學習的理論學習與實踐機器學習
- 通用機器學習演算法:線性迴歸+決策樹+Xgboost機器學習演算法
- 機器學習之決策樹詳細講解及程式碼講解機器學習
- 機器學習從入門到放棄之決策樹演算法機器學習演算法
- 機器學習實戰(三)決策樹ID3:樹的構建和簡單分類機器學習
- 分類——決策樹模型模型