一、決策樹
決策樹是一種簡單高效並且具有強解釋性的模型,廣泛應用於數據分析領域。其本質是一顆由多個判斷節點組成的樹,在使用模型進行預測時,根據輸入參數依次在各個判斷節點進行判斷游走,最后到葉子節點即為預測結果。
在數據挖掘中,決策樹主要有兩種類型:
分類樹 的輸出是樣本的類標。
回歸樹 的輸出是一個實數 (例如房子的價格,病人呆在醫院的時間等)。
術語分類和回歸樹 (CART) 包含了上述兩種決策樹
1、樹模型
首先,在了解樹模型之前,自然想到樹模型和線性模型有什么區別呢?其中最重要的是,樹形模型是一個一個特征進行處理,之前線性模型是所有特征給予權重相加得到一個新的值。決策樹與邏輯回歸的分類區別也在於此,邏輯回歸是將所有特征變換為概率后,通過大於某一概率閾值的划分為一類,小於某一概率閾值的為另一類;而決策樹是對每一個特征做一個划分。另外邏輯回歸只能找到線性分割(輸入特征x與logit之間是線性的,除非對x進行多維映射),而決策樹可以找到非線性分割。而樹形模型更加接近人的思維方式,可以產生可視化的分類規則,產生的模型具有可解釋性(可以抽取規則)。樹模型擬合出來的函數其實是分區間的階梯函數。
其次,需要了解幾個重要的基本概念:根節點(最重要的特征);父節點與子節點是一對,先有父節點,才會有子節點;葉節點(最終標簽)。
- 決策樹:從根節點開始一步步走到葉子節點(決策)
- 所有的數據最終都會落到葉子節點,既可以做分類也可以做回歸
2、決策樹的訓練與測試
訓練階段:從給定的訓練集構造出來一棵樹(從跟節點開始選擇特征, 如何進行特征切分)
測試階段:根據構造出來的樹模型從上到下去走一遍就好了
一旦構造好了決策樹,那么分類或者預測任務就很簡單了,只需要走一遍就可以了,那么難點就在於如何構造出來一顆樹,這就沒那么容易了,需要考慮的問題還有很多的!
3、如何切分特征(選擇節點)
- 問題:根節點的選擇該用哪個特征呢?接下來呢?如何切分呢?
- 想象一下:我們的目標應該是根節點就像一個老大似的能更好的切分數據(分類的效果更好),根節點下面的節點自然就是二當家了。
- 目標:通過一種衡量標准,來計算通過不同特征進行分支選擇后的分類情況,找出來最好的那個當成根節點,以此類推。
4、衡量標准-熵
熵:熵是表示隨機變量不確定性的度量(解釋:說白了就是物體內部的混亂程度,比如雜貨市場里面什么都有那肯定混亂呀,專賣店里面只賣一個牌子的那就穩定多啦)
公式:H(X)=- ∑ pi * logpi, i=1,2, ... , n
一個栗子:
A集合[1,1,1,1,1,1,1,1,2,2]
B集合[1,2,3,4,5,6,7,8,9,1]
顯然A集合的熵值要低,因為A里面只有兩種類別,相對穩定一些而B中類別太多了,熵值就會大很多。(在分類任務中我們希望通過節點分支后數據類別的熵值大還是小呢?)
熵:不確定性越大,得到的熵值也就越大
當p=0或p=1時,H(p)=0,隨機變量完全沒有不確定性
當p=0.5時,H(p)=1,此時隨機變量的不確定性最大
如何決策一個節點的選擇呢?
信息增益:表示特征X使得類Y的不確定性減少的程度。(分類后的專一性,希望分類后的結果是同類在一起)
5、基尼不純度
基尼不純度是指將來自集合中的某種結果隨機應用於集合中某一數據項的預期誤差率。如何集合中的每一個數據項都屬於同一分類,那么推測的結果總會是正確的,因此誤差率是 0;如果有 4 種可能的結果均勻分布在集合內,出錯可能性是75%,基尼不純度為 0.75。該值越高,說明拆分的越不理想,如果該值為 0,說明完美拆分。
6、信息增益
假設集合 U,一次拆分后變為了兩個集合 u1 和 u2 ,則有:
信息增益 = E(U) - (Pu1 x E(u1) + Pu2 x E(u2))
E 可以是基尼不純度或熵。
使用 Pu1 和 Pu2 是為了得到拆分后兩個集合基尼不純度或熵的加權平均,其中 :
- Pu1 = Size(u1) / Size(U)
- Pu2 = Size(u2) / Size(U)
信息增益越大,說明整個集合從無序到有序的速度越快,本次拆分越有效。
二、決策樹的分類
在建立一棵決策樹的過程中,一個很重要的問題就是:怎么樣將樹干分叉?
由此問題,便引申出了三種基本的決策樹:
- ID3:利用數據集的信息增益來划分,在介紹信息增益之前先來了解一下熵的概念。
對於一個數據集,其熵定義如下:
根據香農信息理論,信息熵表示了信息的不確定度,當數據集呈均勻分布時,熵最大。
那么,在分類之前數據集的信息熵是可以計算得到的,它和划分后的數據集的信息熵的差值即為信息增益。這里有一個划分好壞的判斷標准,對於一個特定的數據集,它的信息熵是一定的,若根據某一規則將數據集划分后,數據集的信息熵越小,說明數據集的不確定度越小,即數據間的差異越小,此時信息增益越大。從而得出,信息增益越大,划分方式越好。 - C4.5: 利用數據集的信息增益比來划分數據集,從ID3進化而來,避免了分類決策時偏向於取值較多的特征的問題。
- CART樹:采用基尼系數作為分類標准。基尼系數具有以下特點:
(1)基尼系數是一種不等性度量;
(2)值介於0-1之間,0表示完全相同,1表示完全不同,基尼系數越大,數據集越混亂。
三、決策實例
數據:14天打球情況
特征:4種環境變化
目標:構造決策樹,決定打不打球
划分方式:4種
問題:誰當根節點呢?
依據:信息增益
計算
在歷史數據中(14天)有9天打球,5天不打球,所以此時的熵應為:
4個特征逐一分析,先從outlook特征開始:
Outlook = sunny時,熵值為0.971
Outlook = overcast時,熵值為0
Outlook = rainy時,熵值為0.971
根據數據統計,outlook取值分別為sunny,overcast,rainy的概率分別為:5/14, 4/14, 5/14
熵值計算:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693
對於Outlook的信息增益:0.94 - 0.693 = 0.247
同樣的方式可以計算出其他特征的信息增益,那么我們選擇最大的那個就可以啦,相當於是遍歷了一遍特征,找出來了大當家,然后再其余的中繼續通過信息增益找二當家!
四、決策樹剪枝
決策樹為什么(WHY)要剪枝?
原因是避免決策樹過擬合(Overfitting)樣本。前面的算法生成的決策樹非常詳細並且龐大,每個屬性都被詳細地加以考慮,決策樹的樹葉節點所覆蓋的訓練樣本都是“純”的。因此用這個決策樹來對訓練樣本進行分類的話,你會發現對於訓練樣本而言,這個樹表現完好,誤差率極低且能夠正確得對訓練樣本集中的樣本進行分類。訓練樣本中的錯誤數據也會被決策樹學習,成為決策樹的部分,但是對於測試數據的表現就沒有想象的那么好,或者極差,這就是所謂的過擬合(Overfitting)問題。Quinlan教授試驗,在數據集中,過擬合的決策樹的錯誤率比經過簡化的決策樹的錯誤率要高。
怎么剪枝
現在問題就在於,如何(HOW)在原生的過擬合決策樹的基礎上,生成簡化版的決策樹?可以通過剪枝的方法來簡化過擬合的決策樹。
剪枝可以分為兩種:
預剪枝(Pre-Pruning)和后剪枝(Post-Pruning),下面我們來詳細學習下這兩種方法:
PrePrune:預剪枝,邊建立決策樹邊進行剪枝的操作(更實用),及早的停止樹增長,可以通過限制深度,葉子節點個數葉子節點樣本數,信息增益量等
PostPrune:后剪枝,在已生成過擬合決策樹上進行剪枝,可以得到簡化版的剪枝決策樹。
其實剪枝的准則是如何確定決策樹的規模,可以參考的剪枝思路有以下幾個:
1:使用訓練集合(Training Set)和驗證集合(Validation Set),來評估剪枝方法在修剪結點上的效用
2:使用所有的訓練集合進行訓練,但是用統計測試來估計修剪特定結點是否會改善訓練集合外的數據的評估性能,如使用Chi-Square(Quinlan,1986)測試來進一步擴展結點是否能改善整個分類數據的性能,還是僅僅改善了當前訓練集合數據上的性能。
3:使用明確的標准來衡量訓練樣例和決策樹的復雜度,當編碼長度最小時,停止樹增長,如MDL(Minimum Description Length)准則。
五、總結
處理缺失數據
決策樹模型還有一個很大的優勢,就是可以容忍缺失數據。如果決策樹中某個條件缺失,可以按一定的權重分配繼續往以后的分支走,最終的結果可能有多個,每個結果又一定的概率,即:
最終結果 = 某個分支的結果 x 該分支的權重(該分支下的結果數/總結果數)
處理數值型數據
決策樹主要解決分類問題(結果是離散數據),如果結果是數字,不會考慮這樣的事實:有些數字相差很近,有些數字相差很遠。為了解決這個問題,可以用方差來代替熵或基尼不純度。