鵝廠優文 | 決策樹及ID3算法學習

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~。算法

做者:袁明凱|騰訊IEG測試開發工程師

決策樹的基礎概念

決策樹是一種用樹形結構來輔助行爲研究、決策分析以及機器學習的方式,是機器學習中的一種基本的分類方法。決策樹(Decision Tree)是在已知各類狀況發生機率的基礎上,經過構成決策樹來求取淨現值的指望值大於等於零的機率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用機率分析的一種圖解法。因爲這種決策分支畫成圖形很像一棵樹的枝幹,故稱決策樹。決策樹用於對條件→到決策的過程進行建模。查看一個示例圖:網絡

imgimg

示例給出了經過天氣狀況,晴天、雨天、多雲、是否有風、以及溼度狀況來決策斷定是否適合遊玩。由圖可見,決策樹是一種樹形結構,其中每一個內部節點表示一個屬性上的測試,每一個分支表明一個測試輸出,每一個葉節點表明一種類別。當根據信息構建好決策樹後,就能夠依據決策樹作出對給出的狀況的決策結果斷定了。決策樹算法是一種監管學習,所謂監管學習就是給定一堆樣本,每一個樣本都有一組屬性和一個類別,這些類別是事先肯定的,經過學習獲得一個分類器,分類器可以對新出現的對象給出正確的分類。這樣的機器學習就被稱之爲監督學習。dom

機器學習中,決策樹是一個預測模型;它表明的是對象屬性與對象值之間的一種映射關係。樹中每一個節點表示某個對象,而每一個分叉路徑則表明的某個可能的屬性值,而每一個葉結點則對應從根節點到該葉節點所經歷的路徑所表示的對象的值。因而可知,決策樹最關鍵的點,就是選好決策的每一個分支節點的決策條件的優先級,更好的保證更關鍵的決策條件在樹的更上層,那麼選擇方法中,若是一個分割點(特徵)能夠將當前的全部節點分爲兩類,使得每一類都很「純」即每一類的準確度都很高,也就是它們大多屬於同一個目標結果,那麼就是一個好分割點。這個分割的「純度」的量化要有兩種算法:基尼不純度(Gini Impurity)和信息量(Entropy)。機器學習

GINI不純度

基尼不純度(Gini Impurity)是指,未來自集合中的某種結果隨機應用在集合中,某一數據項的預期偏差率,是決策樹對於混雜程度預測的一種度量方式。函數

img

信息量

信息量(Entropy)能夠指描述一件事情的難易程度,好比太陽從哪邊升起,我只須要說東邊;而世界盃哪支球隊奪冠,我須要說多是巴西、多是德國、多是西班牙、多是……;下面三幅圖,C是最容易描述的,信息量最小,而A是最很差描述的,信息量最大。換句話說,一件事情越「純」,信息量越小。性能

img

信息量如何量化呢?其實就是描述這件事情須要使用多少bit位存儲。拋出硬幣的結果是正面仍是反面,須要0或1存儲,信息量爲1bit。世界盃32支球隊誰會奪冠,最多須要5bit存儲。能夠明顯看出信息量是事件的全部可能性學習

img

以2爲底的對數測試

img

。因此一條信息的不肯定性越大,須要越多的空間存儲,它的信息量就越大。發生機率爲0或1的事件都是很是肯定的事情,它們的信息量就爲0。然而並非全部事件結果的出現機率都像拋硬幣那樣是相同的。好比實際上世界盃32支球隊的奪冠機率都是不一樣的,這種狀況下該怎麼算信息量呢?對以前的公式進行推導:大數據

img

,設P爲事件N中每一個結果的機率,當每一個結果出現機率相同時,公式如此。spa

而若是機率不一樣,記

img

爲每一個結果x1的機率,那麼公式就變成了:香農熵公式:

img

,香農熵(Shannon Entropy)就是這樣來量化計算信息大小,構建決策樹就是要選擇一個特徵,將數據分割後信息量變得越小,越容易描述,越「純」,就越好,所以也是此公式計算後值越小越好。仍是以天氣的案例,來作香農熵的計算,若是是原有信息量,不增長條件的話,

img

,若是增長了以天氣狀況分割的話,爲:

晴天,有無去玩數據信息量:

img

雨天,有無去玩數據信息量:

img

多雲,有無去玩數據信息量:

img

信息量再進行指望相加,獲得分割後的信息量之和:

img

,經過對比發現天氣分割後的信息量最小,且比原信息量小,因此這種分割是最好的。一樣,沿着各自節點向下計算剩餘特徵的信息量,直到信息量爲0或再也不下降。

過分擬合

img

l 藍線爲Gini分佈,紅線爲Entropy分佈,通過實際驗證在決策樹算法中都能比較準確地進行分支;Entropy因爲有Log運算,效率略微比Gini慢;

l 二者都只能以某個特徵進行總體評估(好比戶口),而不能具體到特徵下某個特定類別上,好比多雲的天氣都適合出去玩,具有很高區分度,但不能被這兩種算法挑出來,只能經過修改達到該目的並評估效果的差別。

l 就像前一條提到的,若是樣本中多雲天氣100%適合出去玩,萬一後面有一天多雲天氣風太大而不適合出去玩的話,就會出現決策失效。所以構造決策樹很容易陷入過分擬合(Overfitting)的問題,若是不設置必定的限制條件,必定可讓訓練數據集達到100%準確率,好比爲每條數據都生成一個葉子節點。

案例,好比使用大小區分橘子和柚子,橘子大多比柚子小,因此理論上能夠訓練出體積在某個較小範圍內的大可能是橘子,而另外一個範圍是柚子,這樣的決策樹葉子節點。但若是不進行限制的話,決策樹極可能會變成21cm3的是橘子、32cm3寬的是橘子、85cm3寬的是柚子,它針對訓練集是100%準確的,但對訓練集之外的數據就不能很好的進行決策了。

img

避免過分擬合通常有兩種方式:約束決策樹和剪枝。

約束決策樹

約束決策樹方法有不少種,須要根據狀況或需求來選擇或組合:

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的熵爲:

img

,從信息熵的定義看,隨機變量X的值域範圍越廣,機率分佈越均勻,則隨機變量對應的信息熵值越大。事件發生前,越難猜中結果,事件包含的信息熵越大。依然以天氣數據爲例:

img

對於Play這一列數據,14天中有9天適合遊玩,5天不適合,假設9/14就是適合遊玩的機率,則天氣是否適合遊玩的信息熵計算方法以下:

img

信息增益

數據一般包含多個特徵值,例如天氣數據包含溼度、風力、降雨等。若是將天氣先按照某種屬性進行分類,而後再計算其餘列數據的信息熵,分類前的信息熵與分類後的信息熵的差值則爲數據按某列屬性進行分類後獲得的信息增益。假設能夠按某個屬性劃分紅n類,每一類爲Ti, |Ti|表示數量,劃分後的信息熵計算方法以下:

img

,H(x)和H(p)表達相同的含義。信息增益的計算方法以下:

img

,仍是以天氣數據爲例,計算是否適合遊玩這一列數據按照溫度劃分後的的信息增益。溫度分爲hot、mild、cool三種,將天氣是否時候遊玩的數據按溫度分紅三部分:

img

劃分後的信息量爲:

img

則是否合適遊玩的數據按照溫度劃分後的信息增益爲:0.940-0.911=0.029bits。

ID3算法核心

ID3算法正是一種使用信息增益概念的貪心算法。算法步驟以下:

1) 在全部數據上依次計算每個屬性數據決策後帶來的信息增益,選擇信息增益最大的一個屬性做爲決策樹的根節點,其實反向來講也就是選擇信息熵最小的屬性來作根節點。

2) 將數據第一步選擇的屬性進行分類,在每個分類後的子集數據上建立依次計算剩餘屬性的信息增益,選擇信息增益最大的屬性做爲根節點的葉子節點。

3) 重複執行第2)步,直到全部的子集只包含一個元素或者全部的屬性都已經成爲決策樹的某個節點。

須要指出的是,ID3算法是一種貪心算法,每一步都選擇當前子集上最大信息增益對應的屬性做爲節點。使用ID3該天氣示例的最後創建的決策樹結果以下:

img

ID3對所使用的樣本數據是有必定要求的,第一沒法處理連續性數據,須要離散型數據,除非連續數據被分解爲模糊範疇的類別數據;第二須要足夠的樣本量,由於須要足夠的數據來區分每種數據特徵類別存在過分耦合,從而更好的消除特殊的狀況數據影響;第三,使用信息增益做爲節點的分裂標準,實際上並不合理,會傾向於選擇取值較多的屬性。

ID3的算法劣勢

一、從信息增益的計算方法來看,信息增益沒法直接處理連續取值的的屬性數據,只能處理離散型的數據。

二、信息增益的計算方法須要對某列屬性進行分類,若是屬性是ID,按照ID分類後,全部的分類都只包含一個元素,即ID就是信息增益最大的屬性,致使ID3算法失效。

三、若是預測數據中出現了訓練樣本中沒有出現過的狀況,ID3也是沒有辦法處理的。針對ID3算法的缺陷,後續發明了C4.5,CART,random forest等算法。

問答

「猜你喜歡」是根據什麼來推薦相關資訊的?

相關閱讀

Python機器學習--決策樹算法

GBDT迭代決策樹入門教程

CTR——人工神經網絡+決策樹


此文已由做者受權騰訊雲+社區發佈,轉載請註明文章出處

原文連接:https://cloud.tencent.com/dev...

相關文章
相關標籤/搜索