一、決策樹:轉自公眾號《數據科學家聯盟》
1、決策樹
決策樹是一個非常有意思的模型,它的建模思路是盡可能模擬人做決策的過程。因此決策樹幾乎沒有任何抽象,完全通過生成決策規則來解決分類和回歸問題。因為它的運行機制能很直接地被翻譯成人類語言,即使對建模領域完全不了解的非技術人員也能很好地理解它。因此在學術上被歸為白盒模型(white box model)。
決策樹是一種常見的機器學習算法,它的思想十分朴素,類似於我們平時利用選擇做決策的過程。它是類似流程圖的結構,其中每個內部節點表示一個測試功能,即類似做出決策的過程(動作),每個葉節點都表示一個類標簽,即在計算所有特征之后做出的決定(結果)。標簽和分支表示導致這些類標簽的功能的連接。從根到葉的路徑表示分類規則。比如下面這個“相親決策樹”:
由此我們可以看到,決策樹的思想還是非常直觀的。
用決策樹分類:從根節點開始,對實例的某一特征進行測試,根據測試結果將實例分配到其子節點,此時每個子節點對應着該特征的一個取值,如此遞歸的對實例進行測試並分配,直到到達葉節點,最后將實例分到葉節點的類中。
1.2 決策樹與條件概率
在前面已經從直觀上了解決策樹,及其構造步驟了。現在從統計學的角度對決策樹進行定義能夠能好地幫助我們理解模型。
決策樹表示給定特征條件下,類的條件概率分布,這個條件概率分布表示在特征空間的划分上,將特征空間根據各個特征值不斷進行划分,就將特征空間分為了多個不相交的單元,在每個單元定義了一個類的概率分布,這樣,這條由根節點到達葉節點的路徑就成了一個條件概率分布。
假設X表示特征的隨機變量,Y表示類的隨機變量,那么這個條件概率可以表示為,其中X取值於給定划分下單元的集合,Y取值於類的集合。各葉結點(單元)上的條件概率往往偏向某一個類。根據輸入的測試樣本,由路徑找到對應單元的各個類的條件概率,並將該輸入測試樣本分為條件概率最大的一類中,就可以完成對測試樣本的分類。
下圖a,表示了特種空間的一個划分。大正方形表示特征空間。這個大正方形被若干個小矩形分割,每個小矩形表示一個單元。特征空間划分上的單元構成了一個集合,X取值為單元的集合。假設只有兩類正類負類,Y=+1 OR -1;小矩形中的數字表示單元的類。
下圖b表示特征空間(圖a)划分確定時,特征(划分單元)給定條件下類的條件概率分布。圖b中的條件概率分布對應於圖a的划分;當某個單元C的條件概率滿足 時,即認為該類屬於正類,落在該單元的實例都視為正例。
下圖c表示了根節點到各個葉子結點上不同划分的條件分布。
學習目標與本質
假設給定訓練數據集 ,其中
為輸入實例(特征向量),n為特征個數,
為類標記(label),i=1,2,。。。N為樣本容量。
學習目標:根據給定的訓練數據集構建一個決策模型,使它能夠對實例進行正確的分類。
決策樹學習本質上是從訓練數據集中歸納出一組分類規則。與訓練數據集不相矛盾的決策樹(即能對訓練數據進行正確分類的決策樹)可能是0個或多個。我們需要找到一個與訓練數據矛盾較小的決策樹,同時具有很好的泛化能力。
從另一個角度看,決策樹學習是由訓練數據集估計條件概率模型。基於特征空間划分的類的條件概率模型有無窮多個。我們選擇的條件概率模型應該不僅對訓練數據有很好地擬合,而且對未知數據有很好地預測。
決策樹損失函數
與其他模型相同,決策樹學習用損失函數表示這一目標。決策樹學習的損失函數通常是正則化的極大似然函數。決策樹學習的策略是以損失函數為目標函數的最小化。
關於極大似然函數:極大似然法是屬於數理統計范疇,旨在由果溯因。把“極大似然估計”拆成三個詞:極大(最大的概率)、似然(看起來是這個樣子的)、估計(就是這個樣子的),連起來就是:大概率看起來是這樣的,那就是這樣。
比如扔一枚骰子(骰子每個面上只標記1或2),現在告訴你扔了n次骰子其中有k次朝上的是1;然后問你這個骰子標記為1的面所占的比例w是多少?極大似然法的思想就是估計當w取值為多少的時候,k次朝上的可能性最大。具體計算方法就是對表達式求最大值,得到參數值估計值:一般就是對這個表達式求一階導=0(二階導<0);
這就是極大似然估計方法的原理:用使概率達到最大的那個概率值w來估計真實參數w。決策樹生成的過程可以理解成對決策樹模型的參數估計(就是基於特征空間划分的類的概率模型),根據訓練數據的特征分布,選擇使得模型最契合當前樣本分布空間時的條件概率模型。
當損失函數確定以后,學習問題就變為在損失函數意義下選擇最優決策樹的問題。因為從所有可能的決策樹中選取最優決策樹是NP完全問題,所以現實中決策樹學習算法通常采用啟發式方法,近似求解這一最優化問題。這樣得到的決策樹是次最優的。
決策樹的構建
決策樹通常有三個步驟:
- 特征選擇
- 決策樹的生成
- 決策樹的修剪
決策樹學習的算法通常是一個遞歸地選擇最優特征,並根據該特征對訓練數據進行分割,使得對各個子數據集有一個最好的分類的過程。這一過程對應着對特征空間的划分,也對應着決策樹的構建。
這一過程對應着對特征空間的划分,也對應着決策樹的構建。
- 開始:構建根節點,將所有訓練數據都放在根節點,選擇一個最優特征,按照這一特征將訓練數據集分割成子集,使得各個子集有一個在當前條件下最好的分類。
- 如果這些子集已經能夠被基本正確分類,那么構建葉節點,並將這些子集分到所對應的葉子節點去。
- 如果還有子集不能夠被正確的分類,那么就對這些子集選擇新的最優特征,繼續對其進行分割,構建相應的節點,如此遞歸進行,直至所有訓練數據子集被基本正確的分類,或者沒有合適的特征為止。
- 每個子集都被分到葉節點上,即都有了明確的類,這樣就生成了一顆決策樹。
以上方法就是決策樹學習中的特征選擇和決策樹生成,這樣生成的決策樹可能對訓練數據有很好的分類能力,但對未知的測試數據卻未必有很好的分類能力,即可能發生過擬合現象。我們需要對已生成的樹自下而上進行剪枝,將樹變得更簡單,從而使其具有更好的泛化能力。具體地,就是去掉過於細分的葉結點,使其回退到父結點,甚至更高的結點,然后將父結點或更高的結點改為新的葉結點,從而使得模型有較好的泛化能力。。
決策樹生成和決策樹剪枝是個相對的過程,決策樹生成旨在得到對於當前子數據集最好的分類效果(局部最優),而決策樹剪枝則是考慮全局最優,增強泛化能力。
在對此有一定了解之后,我們先看看,如何在sklearn中將決策樹用起來。然后再學習其中的細節。
2、信息熵與最優划分
3、基尼系數
4、CART
二、實現:決策樹實現