歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~。
作者:袁明凱|騰訊IEG測試開發工程師
決策樹的基礎概念
決策樹是一種用樹形結構來輔助行為研究、決策分析以及機器學習的方式,是機器學習中的一種基本的分類方法。決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構成決策樹來求取淨現值的期望值大於等於零的概率,評價專案風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由於這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。決策樹用於對條件→到決策的過程進行建模。檢視一個示例圖:
示例給出了通過天氣情況,晴天、雨天、多雲、是否有風、以及溼度情況來決策判定是否適合遊玩。由圖可見,決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。當根據資訊構建好決策樹後,就可以依據決策樹做出對給出的情況的決策結果判定了。決策樹演算法是一種監管學習,所謂監管學習就是給定一堆樣本,每個樣本都有一組屬性和一個類別,這些類別是事先確定的,通過學習得到一個分類器,分類器能夠對新出現的物件給出正確的分類。這樣的機器學習就被稱之為監督學習。
機器學習中,決策樹是一個預測模型;它代表的是物件屬性與物件值之間的一種對映關係。樹中每個節點表示某個物件,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結點則對應從根節點到該葉節點所經歷的路徑所表示的物件的值。由此可見,決策樹最關鍵的點,就是選好決策的每個分支節點的決策條件的優先順序,更好的保證更關鍵的決策條件在樹的更上層,那麼選擇方法中,如果一個分割點(特徵)可以將當前的所有節點分為兩類,使得每一類都很“純”即每一類的準確度都很高,也就是它們大多屬於同一個目標結果,那麼就是一個好分割點。這個分割的“純度”的量化要有兩種演算法:基尼不純度(Gini Impurity)和資訊量(Entropy)。
GINI不純度
基尼不純度(Gini Impurity)是指,將來自集合中的某種結果隨機應用在集合中,某一資料項的預期誤差率,是決策樹對於混雜程度預測的一種度量方式。
資訊量
資訊量(Entropy)可以指描述一件事情的難易程度,比如太陽從哪邊升起,我只需要說東邊;而世界盃哪支球隊奪冠,我需要說可能是巴西、可能是德國、可能是西班牙、可能是……;下面三幅圖,C是最容易描述的,資訊量最小,而A是最不好描述的,資訊量最大。換句話說,一件事情越“純”,資訊量越小。
資訊量如何量化呢?其實就是描述這件事情需要使用多少bit位儲存。丟擲硬幣的結果是正面還是反面,需要0或1儲存,資訊量為1bit。世界盃32支球隊誰會奪冠,最多需要5bit儲存。可以明顯看出資訊量是事件的所有可能性
以2為底的對數
。所以一條資訊的不確定性越大,需要越多的空間儲存,它的資訊量就越大。發生概率為0或1的事件都是非常確定的事情,它們的資訊量就為0。然而並不是所有事件結果的出現概率都像拋硬幣那樣是相同的。比如實際上世界盃32支球隊的奪冠概率都是不同的,這種情況下該怎麼算資訊量呢?對之前的公式進行推導:
,設P為事件N中每個結果的概率,當每個結果出現概率相同時,公式如此。
而如果概率不同,記
為每個結果x1的概率,那麼公式就變成了:夏農熵公式:
,夏農熵(Shannon Entropy)就是這樣來量化計算資訊大小,構建決策樹就是要選擇一個特徵,將資料分割後資訊量變得越小,越容易描述,越“純”,就越好,因此也是此公式計算後值越小越好。還是以天氣的案例,來做夏農熵的計算,如果是原有資訊量,不增加條件的話,
,如果增加了以天氣情況分割的話,為:
晴天,有無去玩資料資訊量:
雨天,有無去玩資料資訊量:
多雲,有無去玩資料資訊量:
資訊量再進行期望相加,得到分割後的資訊量之和:
,通過對比發現天氣分割後的資訊量最小,且比原資訊量小,所以這種分割是最好的。同樣,沿著各自節點向下計算剩餘特徵的資訊量,直到資訊量為0或不再降低。
過度擬合
l 藍線為Gini分佈,紅線為Entropy分佈,經過實際驗證在決策樹演算法中都能比較準確地進行分支;Entropy由於有Log運算,效率略微比Gini慢;
l 兩者都只能以某個特徵進行整體評估(比如戶口),而不能具體到特徵下某個特定類別上,比如多雲的天氣都適合出去玩,具備很高區分度,但不能被這兩種演算法挑出來,只能通過修改達到該目的並評估效果的差異。
l 就像前一條提到的,如果樣本中多雲天氣100%適合出去玩,萬一後面有一天多雲天氣風太大而不適合出去玩的話,就會出現決策失效。因此構造決策樹很容易陷入過度擬合(Overfitting)的問題,如果不設定一定的限制條件,一定可以讓訓練資料集達到100%準確率,比如為每條資料都生成一個葉子節點。
案例,比如使用大小區分橘子和柚子,橘子大多比柚子小,所以理論上可以訓練出體積在某個較小範圍內的大多是橘子,而另一個範圍是柚子,這樣的決策樹葉子節點。但如果不進行限制的話,決策樹很可能會變成21cm3的是橘子、32cm3寬的是橘子、85cm3寬的是柚子,它針對訓練集是100%準確的,但對訓練集以外的資料就不能很好的進行決策了。
避免過度擬合一般有兩種方式:約束決策樹和剪枝。
約束決策樹
約束決策樹方法有很多種,需要根據情況或需求來選擇或組合:
1. 設定每個葉子節點的最小樣本數,這能避免某個特徵類別只適用於極小量的樣本;
2. 設定每個節點的最小樣本數,與上類似,但它是從根節點就開始避免過度擬合;
3. 設定樹的最大深度,避免無限往下劃分;
4. 設定葉子節點的最大數量,避免出現無限多的劃分類別;
5. 設定評估分割資料時的最大特徵數量,避免每次都考慮所有特徵為求“最佳”,而採取隨機選取的方式避免過度擬合;
上面這些資料到底設定為多少合適呢,就需要使用實際的測試集來驗證不同約束條件下的決策準確性來評估了。
剪枝
剪枝是先構造好決策樹之後再進行調整,總體思路是:對每個節點或其子樹進行裁剪,通過一些演算法評估裁剪前後決策樹模型對資料的預測能力是否有降低,如果沒有降低則說明可以剪枝。
幾個常用的剪枝評估方法:
l 錯誤率降低剪枝(Reduced Error Pruning,REP)
a) 使用某種順序遍歷節點
b) 刪除以此節點為根節點的子樹
c) 使此節點為葉子節點
d) 將訓練集中該節點特徵出現概率最大的那一類賦予此節點(即這個節點就代表這一類)
e) 計算整體誤判率或準確率,如果比剪枝前更好,那麼就剪掉
l 悲觀剪枝(Pessimistic Error Pruning,PEP)
a) 評估單個節點(並非子樹)是否裁剪
b) 使用該節點下所有葉子節點的誤差之和評估
c) 當裁剪前後的誤差率不超過某個標準值,則裁剪
l 代價複雜度剪枝(Cost Complexity Pruning,CCP)
a) 在CART演算法中具體介紹
決策樹演算法的優劣
優勢:簡單易懂;可處理數值和類別兩種型別的資料;只需要少量的訓練集即可使用;使用白盒模型,可清晰觀察每個步驟;對大資料量的處理效能較好;相比其他演算法更貼近人類思維方式。
劣勢:準確性不如其他演算法,對連續性欄位難預測,特別是時間順序的資料,需要較多預處理工作;樹的穩定性不足,訓練集的小變化就可能引起整棵樹的劇變,導致最終預測的變化;容易過擬合;決策樹處理包含不同數值類別的特徵資料時,容易傾向於選擇取值更多的特徵作為分割節點,對欄位特例化嚴重的資料,例如遊戲使用者分析中的使用者名稱,就更容易出現過擬合,並且類別越多,錯誤就會增加的更快。
ID3- Iterative Dichotomiser 3
ID3也就是第三代迭代式二分法,是一種基本的構建決策樹的演算法。ID3演算法是一種貪心演算法,用來構造決策樹,每一步選擇當前的最優決策,並不是整體可見的最優決策。ID3演算法起源於概念學習系統(CLS),以資訊熵的下降速度為選取測試屬性的標準,即在每個節點選取還尚未被用來劃分的具有最高資訊增益的屬性作為劃分標準,然後繼續這個過程,直到生成的決策樹能完美分類訓練樣例。該演算法是以資訊理論為基礎,以資訊熵和資訊增益度為衡量標準,從而實現對資料的歸納分類。
資訊熵
上文已介紹過資訊量的概念,這裡從另外一個角度來說明。熵是一個來源於物理學的概念,用於度量一個熱力學系統的無序程度,一個系統越混亂,系統的熵值越大。在資訊理論中,熵用於度量事件的不確定性,不確定性越高則資訊熵越大。如果事件發生前,事件的結果就已經確定,如一定發生,或者一定不發生,資訊熵趨近於零。Shannon給出了度量資訊熵的數學公式。對於隨機變數X,其值域為{x1,x2,…,xn},pi為xi發生的概率密度函式,則隨機變數X的熵為:
,從資訊熵的定義看,隨機變數X的值域範圍越廣,概率分佈越均勻,則隨機變數對應的資訊熵值越大。事件發生前,越難猜中結果,事件包含的資訊熵越大。依然以天氣資料為例:
對於Play這一列資料,14天中有9天適合遊玩,5天不適合,假設9/14就是適合遊玩的概率,則天氣是否適合遊玩的資訊熵計算方法如下:
資訊增益
資料通常包含多個特徵值,例如天氣資料包含溼度、風力、降雨等。如果將天氣先按照某種屬性進行分類,然後再計算其他列資料的資訊熵,分類前的資訊熵與分類後的資訊熵的差值則為資料按某列屬性進行分類後得到的資訊增益。假設可以按某個屬性劃分成n類,每一類為Ti, |Ti|表示數量,劃分後的資訊熵計算方法如下:
,H(x)和H(p)表達相同的含義。資訊增益的計算方法如下:
,還是以天氣資料為例,計算是否適合遊玩這一列資料按照溫度劃分後的的資訊增益。溫度分為hot、mild、cool三種,將天氣是否時候遊玩的資料按溫度分成三部分:
劃分後的資訊量為:
則是否合適遊玩的資料按照溫度劃分後的資訊增益為:0.940-0.911=0.029bits。
ID3演算法核心
ID3演算法正是一種使用資訊增益概念的貪心演算法。演算法步驟如下:
1) 在所有資料上依次計算每一個屬性資料決策後帶來的資訊增益,選擇資訊增益最大的一個屬性作為決策樹的根節點,其實反向來說也就是選擇資訊熵最小的屬性來做根節點。
2) 將資料第一步選擇的屬性進行分類,在每一個分類後的子集資料上建立依次計算剩餘屬性的資訊增益,選擇資訊增益最大的屬性作為根節點的葉子節點。
3) 重複執行第2)步,直到所有的子集只包含一個元素或者所有的屬性都已經成為決策樹的某個節點。
需要指出的是,ID3演算法是一種貪心演算法,每一步都選擇當前子集上最大資訊增益對應的屬性作為節點。使用ID3該天氣示例的最後建立的決策樹結果如下:
ID3對所使用的樣本資料是有一定要求的,第一無法處理連續性資料,需要離散型資料,除非連續資料被分解為模糊範疇的類別資料;第二需要足夠的樣本量,因為需要足夠的資料來區分每種資料特徵類別存在過度耦合,從而更好的消除特殊的情況資料影響;第三,使用資訊增益作為節點的分裂標準,實際上並不合理,會傾向於選擇取值較多的屬性。
ID3的演算法劣勢
1、從資訊增益的計算方法來看,資訊增益無法直接處理連續取值的的屬性資料,只能處理離散型的資料。
2、資訊增益的計算方法需要對某列屬性進行分類,如果屬性是ID,按照ID分類後,所有的分類都只包含一個元素,即ID就是資訊增益最大的屬性,導致ID3演算法失效。
3、如果預測資料中出現了訓練樣本中沒有出現過的情況,ID3也是沒有辦法處理的。針對ID3演算法的缺陷,後續發明了C4.5,CART,random forest等演算法。
問答
相關閱讀
此文已由作者授權騰訊雲+社群釋出,轉載請註明文章出處
原文連結:https://cloud.tencent.com/developer/article/1065885