決策樹分類是數據挖掘中分類分析的一種算法。顧名思義,決策樹是基於「樹」結構來進行決策的,是人類在面臨決策問題時一種很天然的處理機制。例以下圖一個簡單的判別買不買電腦的決策樹:html
下圖是一個測試數據集,咱們以此數據集爲例,來看下如何生成一棵決策樹。算法
決策樹分類的主要任務是要肯定各個類別的決策區域,說着說着,肯定不一樣類別之間的邊界。在決策樹分類模型中,不一樣類別之間的邊界經過一個樹狀結構來表示。測試
經過以上分析,咱們能夠得出如下幾點:spa
所以,決策樹建樹算法就是:選擇樹根的過程3d
第一步,選擇屬性做爲樹根htm
比較流行的屬性選擇方法:信息增益blog
信息增益最大的屬性被認爲是最好的樹根it
在選擇屬性以前,咱們先來了解一個概念:熵 什麼是熵?什麼是信息?如何度量他們?數據挖掘
下面這個文章通俗易懂的解釋了這個概念變量
http://www.360doc.com/content/19/0610/07/39482793_841453815.shtml
熵用來表示不肯定性的大小
信息用來消除不肯定性
所以,計算信息增益的總的思路是:
1) 首先計算不考慮任何輸入變量的狀況下要肯定S中任同樣本所屬類別須要的熵Entropy(S);
2) 計算引入每一個輸入變量X後要肯定S中任同樣本所屬類別須要的熵Entropy (X,S);
3) 計算兩者的差,Entropy (S) - Entropy (X, S),此即爲變量X所能帶來的信息(增益),記爲Gain(X,S)。
結合上面對於熵的解釋的文章裏,咱們能得出求熵的公式:
下圖很形象的解釋了熵表明的含義。
咱們還以上面的一組數據來分析,信息增益具體應該怎麼算
根據上面的討論,咱們先用公式計算不考慮任何輸入屬性時,要肯定訓練集S中任同樣本所屬類別須要的熵。
此例子中,目標屬性即buys_computer,有2個不一樣的取值,yes和no,所以有2個不一樣的類別(m=2)。設P對應buys_computer=yes的狀況,N對應buys_computer=no的狀況,則P有9個樣本,N有5個樣本。因此,總的熵就是:
即,E(p,n) = E(9,5) = 0.940
而後咱們來求屬性age的熵,age有三個屬性,樣本個數分別爲5,4,5,因此屬性age的熵就是:
最後,咱們能夠求出屬性age的信息增益爲:
一樣的,咱們能夠分別求出income,student和credit_rating的信息增益
finally,咱們能夠得出屬性age的信息增益最大,因此,應該用屬性age做爲樹根。
肯定好樹根以後,下一步咱們還要按照剛纔的步驟來肯定下一個節點的左右子樹分別用哪一個屬性做爲樹根,直到最後得出完整的決策樹。
雖然決策樹分類算法能夠快速的預測分類,可是也會有過分擬合(Overfitting)的問題。
有些生成的決策樹徹底服從於訓練集,太循規蹈矩,以致於生成了太多的分支,某些分支多是一些特殊狀況,出現的次數不多,不具備表明性,更有甚者僅在訓練集中出現,致使模型的準確性很低。
一般採用剪枝的方式來克服 overfitting,剪枝有兩種方法:
先剪:構造樹的過程當中進行修剪。不符合條件的分支則不建。
後剪: 整個樹生成以後進行修剪