(ID3、C4.5、CART、隨機森林、GBDT)

注:本篇文章也是多個博客的綜合整理。

1、決策樹基本問題
1.1 定義
image

我們應該設計什麼的算法,使得計算機對貸款申請人員的申請信息自動進行分類,以決定能否貸款?

 一個女孩的母親要給這個女孩介紹男朋友,於是有了下面的對話:

女兒:多大年紀了?

母親:26。

女兒:長的帥不帥?

母親:挺帥的。

女兒:收入高不?

母親:不算很高,中等情況。

女兒:是公務員不?

母親:是,在稅務局上班呢。

女兒:那好,我去見見。

決策過程:

image

這個女孩的決策過程就是典型的分類樹決策。相當於通過年齡、長相、收入和是否公務員對將男人分爲兩個類別:見和不見
決策樹是一種描述對樣本實例(男人)進行分類(見或不見)的樹形結構。

決策樹由結點和有向邊組成。最上部是根節點,此時所有樣本都在一起,經過該節點後樣本被劃分到各子節點中。每個子節點再用新的特徵來進一步決策,直到最後的葉節點。葉節點上只包含單純一類樣本(見或不見),不需要在進行劃分。

結點兩種類型:內部結點和葉結點。

內部結點表示一個特徵或屬性,葉節點表示一個類。

1.2 熵
首先,我們該選擇什麼標準(屬性、特徵)作爲我們的首要條件(根節點)對樣本(男人)進行劃分,決定見或不見呢?——特徵選擇

母親希望女兒能最快速的有一個明確的態度,決定見或不見,這樣好給男方一個明確的答覆。

母親需要獲得儘可能多的信息,減少不確定性。

信息的如何度量?——熵

母親得到信息越多,女兒的態度越明確,與男方見與不見的不確定性越低。因此,信息量與不確定性相對應。使用熵來表示不確定性的度量。

熵定義:如果一件事有k種可的結果,每種結果的概率爲:

image

則我們對此事件的結果進行觀察後得到的信息量爲:

image

熵越大,隨機變量(見與不見)的不確定性越大。

1.3 條件熵(局部,現象發生的前提下的熵)
條件熵H(Y|X)表示在已知隨機變量X的條件下隨機變量Y的不確定性。例如,知道男生年齡的前提條件下,根據女兒見與不見的不確定性。

image

熵與條件熵中概率由數據估計得到時,所對應的熵和條件熵稱爲經驗熵和經驗條件熵。若概率爲0,令0log0=0

1.4 信息增益
信息增益表示得知特徵X(年齡)的信息使得類Y(見與不見)的信息的不確定性減少程度。

特徵A對訓練數據集D的信息增益g(D,A),定義爲集合D的經驗熵H(D)與特徵A給定條件下的經驗條件熵H(D|A)之差

image

熵H(Y)與條件熵H(Y|X)之差稱爲互信息,即g(D,A)。

信息增益大表明信息增多,信息增多,則不確定性就越小,母親應該選擇使得信息增益增大的條件詢問女兒。

1.5 信息增益準則的特徵選擇方法

對數據集D,計算每個特徵的信息增益,並比較他們的大小,選擇信息增益最大的特徵。

1.6 信息增益率

信息增益率定義:特徵A對訓練數據集D的信息增益比定義爲其信息增益與訓練數據D關於特徵A的值的熵HA(D)之比

image

其中,image ,n是特徵A取值個數。如A代表年齡。

image

2 ID3

2.1 ID3 的定義
ID3算法的核心是在決策樹各個子節點上應用信息增益準則選擇特徵,遞歸的構建決策樹,具體方法是:從根節點開始,對節點計算所有可能的特徵的信息增益,選擇信息增益最大的特徵作爲節點的特徵,由該特徵的不同取值建立子節點;再對子節點遞歸調用以上方法,構建決策樹。

直到所有特徵的信息增益均很小或沒有特徵可以選擇爲止。最後得到一個決策樹。

例子:貸款申請樣本數據表

image

根據貸款申請樣本數據表,我們有15條樣本記錄,則樣本容量爲15。最終分爲是否貸款2個類,其中是有9條記錄,否有6條記錄。有年齡、有工作、有自己的房子和信貸情況4個不同特徵。每個特徵有不同的取值,如年齡有老、中、青3種取值。


由熵的定義:

image

計算經驗熵:

image


然後計算各特徵對數據集D的信息增益。分別以A1,A2,A3,A4表示年齡、有工作、有自己的房子和信貸情況4個特徵。

根據年齡有取值青年、中年、老年。

青年貸款是2條記錄,否3條記錄,共5條記錄

中年貸款是3條記錄,否2條記錄,共5條記錄

老年貸款是4條記錄,否1條記錄,共5條記錄

由條件熵公式

image

年齡爲已知條件的條件熵爲

image

D1,D2,D3分別是年齡取值爲青年、中年、老年的樣本子集。

以年齡爲條件的信息增益爲

image

有工作的信息增益

image

有房子的信息增益

image

信貸情況的信息增益

image

最後比較各特徵的信息增益值,對於特徵A3有自己房子的信息增益值最大,所以選擇特徵A3作爲最優特徵。

由於特徵A3(有自己房子)的信息增益值最大,所以選擇特徵A3作爲根節點的特徵。它將訓練數據集劃分爲兩個子集D1(A3取值爲是)和D2(A3取值爲否)。由於D1只有同一類樣本點,可以明確要貸款給D1,所以它成爲一個葉節點,節點類標記爲“是”。

對於D2則需要從特徵A1(年齡),A2(有工作)和A4(信貸情況)中選擇新的特徵。計算各個特徵的信息增益:

image

image

image

選擇信息增益最大的特徵A2(有工作)作爲節點特徵。A2有2個取值,一個對應“是”(有工作)的子節點,包含3個樣本,他們屬於同一類,所以這是一個葉節點,類標記爲“是”;另一個對應“否”(無工作)的子節點,包含6個樣本,屬於同一類,這也是一個葉節點,類標記爲“否”。

換句話有15個貸款人,經過是否有房這一篩選條件,有房子的6個人能夠貸款。剩餘9個人需要進一步篩選,以是否有工作爲篩選條件,有工作的3個人可以貸款,無工作的6個人不能夠貸款。

image

該決策樹只用了兩個特徵(有兩個內部結點),以有自己的房子作爲首要判決條件,然後以有工作作爲判決條件是否可以貸款。

ID3算法只有樹的生成,所以該算法生成的樹容易產生過擬合,分得太細,考慮條件太多。

2.2 ID3 的缺點
1.用信息增益選擇屬性時偏向於選擇分枝比較多的屬性值,即取值 多的屬性。

2.不能處理連續屬性。

2.3 ID3 的代碼實現
1)準備訓練數據

image

2)計算信息增益

image

image

image

image

image

image

image
下邊是計算

image

image
下邊計算

image
3)遞歸構建決策樹
其中當所有的特徵都用完時,採用多數表決的方法來決定該葉子節點的分類,即該葉節點中屬於某一類最多的樣本數,那麼我們就說該葉節點屬於那一類!

image

創建樹

image

image
運行測試:

image

4)查看生成的決策樹
image

image

image

5)測試數據
image

image

image

image

6)決策樹的存儲
構造決策樹是一個很耗時的任務。爲了節省計算時間,最好能夠在每次執行分類時調用已經構造好的決策樹。爲了解決這個問題,需要使用Python模塊pickle序列化對象,序列化對象可以在磁盤上保存對象,並在需要的時候讀取出來。

image

image

運行測試:

image

7)示例:使用決策樹預測隱形眼鏡類型
image

image

image

image

image

image

3、C4.5
C4.5算法是數據挖掘十大算法之一,它是對ID3算法的改進,相對於ID3算法主要有以下幾個改進:

(1)用信息增益比來選擇屬性

(2)在決策樹的構造過程中對樹進行剪枝

(3)對非離散數據也能處理

(4)能夠對不完整數據進行處理


以下例子以ID3的過程爲主,穿插着增添了C4.5的特性:
本文采用評價電信服務保障中的滿意度預警專題來解釋決策樹算法,即假如我家辦了電信的寬帶,有一天寬帶不能上網了,於是我打電話給電信報修,然後電信派相關人員進行維修,修好以後電信的回訪專員詢問我對這次修理障礙的過程是否滿意,我會給我對這次修理障礙給出相應評價,滿意或者不滿意。根據歷史數據可以建立滿意度預警模型,建模的目的就是爲了預測哪些用戶會給出不滿意的評價。目標變量爲二分類變量:滿意(記爲0)和不滿意(記爲1)。自變量爲根據修理障礙過程產生的數據,如障礙類型、障礙原因、修障總時長、最近一個月發生故障的次數、最近一個月不滿意次數等等。簡單的數據如下:
客戶ID    故障原因    故障類型    修障時長       滿意度
001    1    5   10.2   1
002    1    5   12   0
003  1    5    14   1
004    2     5    16  0
005   2    5   18  1
006   2    6    20   0
007    3     6   22 1
008    3    6   23   0
009    3    6   24    1
010    3    6   25    0
故障原因和故障類型都爲離散型變量,數字代表原因ID和類型ID。修障時長爲連續型變量,單位爲小時。滿意度中1爲不滿意、0爲滿意。
    下面沿着分裂屬性的選擇和樹剪枝兩條主線,去描述三種決策樹算法構造滿意度預警模型:
    分裂屬性的選擇:即該選擇故障原因、故障類型、修障時長三個變量中的哪個作爲決策樹的第一個分支。
ID3算法是採用信息增益來選擇樹叉,c4.5算法採用增益率,CART算法採用Gini指標。此外離散型變量和連續型變量在計算信息增益、增益率、Gini指標時會有些區別。詳細描述如下:
    1.ID3算法的信息增益:
     信息增益的思想來源於信息論的香農定理,ID3算法選擇具有最高信息增益的自變量作爲當前的樹叉(樹的分支),以滿意度預警模型爲例,模型有三個自變量:故障原因、故障類型、修障時長。分別計算三個自變量的信息增益,選取其中最大的信息增益作爲樹叉。信息增益=原信息需求-要按某個自變量劃分所需要的信息。
如以自變量故障原因舉例,故障原因的信息增益=原信息需求(即僅僅基於滿意度類別比例的信息需求,記爲a)-按照故障原因劃分所需要的信息需求(記爲a1)。
其中原信息需求a的計算方式爲:


其中D爲目標變量,此例中爲滿意度。m=2,即滿意和不滿意兩種情況。Pi爲滿意度中屬於分別屬於滿意和不滿意的概率。此例中共計10條數據,滿意5條,不滿意5條。概率都爲1/2。Info(滿意度)即爲僅僅基於滿意和滿意的類別比例進行劃分所需要的信息需求,計算方式爲:

按照故障原因劃分所需要的信息需求(記爲a1)可以表示爲:


其中A表示目標變量D(即滿意度)中按自變量A劃分所需要的信息,即按故障類型進行劃分所需要的信息。V表示在目標變量D(即滿意度)中,按照自變量A(此處爲故障原因)進行劃分,即故障原因分別爲1、2、3進行劃分,將目標變量分別劃分爲3個子集,{D1、D2、D3},因此V=3。即故障原因爲1的劃分中,有2個不滿意和1個滿意。D1即指2個不滿意和1個滿意。故障原因爲2的劃分中,有1個不滿意和2個滿意。D2即指1個不滿意和2個滿意。故障原因爲3的劃分中,有2個不滿意和2個滿意。D3即指2個不滿意和2個滿意。具體公式如下:


注:此處的計算結果即0.165不準確,沒有真正去算,結果僅供參考。
因此變量故障原因的信息增益Gain(故障原因)=Info(滿意度)- Info故障原因(滿意度)=1-0.165=0.835
同樣的道理,變量故障類型的信息增益計算方式如下:

                    =0.205(結果不準,爲準確計算)
變量故障類型的信息增益Gain(故障類型)=1-0.205=0.795

故障原因和故障類型兩個變量都是離散型變量,按上述方式即可求得信息增益,但修障時長爲連續型變量,對於連續型變量該怎樣計算信息增益呢?

(此處的方法來自於C4.5)

只需將連續型變量由小到大遞增排序,取相鄰兩個值的中點作爲分裂點,然後按照離散型變量計算信息增益的方法計算信息增益,取其中最大的信息增益作爲最終的分裂點。如求修障時長的信息增益,首先將修障時長遞增排序,即10.2、12、14、16、18、20、22、23、24、25,取相鄰兩個值的中點,如10.2和12,中點即爲(10.2+12)/2=11.1,同理可得其他中點,分別爲11.1、13、15、17、19、21、22.5、23.5、24.5。對每個中點都離散化成兩個子集,如中點11.1,可以離散化爲兩個<=11.1和>11.1兩個子集,然後按照離散型變量的信息增益計算方式計算其信息增益,

如中點11.1的信息增益計算過程如下:

中點11.1的信息增益Gain(修障時長)=1-0.222=0.778

中點13的信息增益計算過程如下:

中點13的信息增益Gain(修障時長)=1-1=0
同理分別求得各個中點的信息增益,選取其中最大的信息增益作爲分裂點,如取中點11.1。然後與故障原因和故障類型的信息增益相比較,取最大的信息增益作爲第一個樹叉的分支,此例中選取了故障原因作爲第一個分叉。按照同樣的方式繼續構造樹的分支。
    總之,信息增益的直觀解釋爲選取按某個自變量劃分所需要的期望信息,該期望信息越小,劃分的純度越高。因爲對於某個分類問題而言,Info(D)都是固定的,而信息增益Gain(A)=Info(D)-InfoA(D)  影響信息增益的關鍵因素爲:-InfoA(D),即按自變量A進行劃分,所需要的期望信息越小,整體的信息增益越大,越能將分類變量區分出來。

由於信息增益選擇分裂屬性的方式會傾向於選擇具有大量值的屬性(即自變量),如對於客戶ID,每個客戶ID對應一個滿意度,即按此變量劃分每個劃分都是純的(即完全的劃分,只有屬於一個類別),客戶ID的信息增益爲最大值1。但這種按該自變量的每個值進行分類的方式是沒有任何意義的。爲了克服這一弊端,有人提出了採用增益率(GainRate)來選擇分裂屬性。計算方式如下:


其中Gain(A)的計算方式與ID3算法中的信息增益計算方式相同。
以故障原因爲例:

                         =1.201
  Gain(故障原因)=0.835(前文已求得)
    GainRate故障原因(滿意度)=1.201/0.835=1.438
同理可以求得其他自變量的增益率。
選取最大的信息增益率作爲分裂屬性。

4、CART
 CART算法選擇分裂屬性的方式是比較有意思的,首先計算不純度,然後利用不純度計算Gini指標。以滿意度預警模型爲例,計算自變量故障原因的Gini指標時,先按照故障原因可能的子集進行劃分,即可以將故障原因具體劃分爲如下的子集:{1,2,3}、{1,2}、{1,3}、{2,3}、{1}、{2}、{3}、{},共計8(2^V)個子集。由於{1,2,3}和{}對於分類來說沒有任何意義,因此實際分爲2^V-2共計6個有效子集。然後計算這6個有效子集的不純度和Gini指標,選取最小的Gini指標作爲分裂屬性。
不純度的計算方式爲:


pi表示按某個變量劃分中,目標變量不同類別的概率。
某個自變量的Gini指標的計算方式如下:


        對應到滿意度模型中,A爲自變量,即故障原因、故障類型、修障時長。D代表滿意度,D1和D2分別爲按變量A的子集所劃分出的兩個不同元組,如按子集{1,2}劃分,D1即爲故障原因屬於{1,2}的滿意度評價,共有6條數據,D2即故障原因不屬於{1,2}的滿意度評價,共有3條數據。計算子集{1,2}的不純度時,即Gini(D1),在故障原因屬於{1,2}的樣本數據中,分別有3條不滿意和3條滿意的數據,因此不純度爲1-(3/6)^2-(3/6)^2=0.5。
        以故障原因爲例,計算過程如下:


                                                          =0.5
計算子集故障原因={1,3}的子集的Gini指標時,D1和D2分別爲故障原因={1,3}的元組共計7條數據,故障原因不屬於{1,3}的元組即故障原因爲2的數據,共計3條數據。詳細計算過程如下:

=0.52

同理可以計算出故障原因的每個子集的Gini指標,按同樣的方式還可以計算故障類型和修障時長每個子集的Gini指標,選取其中最小的Gini指標作爲樹的分支( Gini(D)越小,則數據集D的純度越高)。連續型變量的離散方式與信息增益中的離散方式相同。

5、樹的剪枝
1)先剪枝:
通過提前停止樹的構造,如通過決定在給定的節點不再分裂或劃分訓練元組的子集,而對樹剪枝,一旦停止,該節點即成爲樹葉。在構造樹時,可以使用諸如統計顯著性、信息增益等度量評估分裂的優劣,如果劃分一個節點的元組低於預先定義閾值的分裂,則給定子集的進一步劃分將停止。但選取一個適當的閾值是困難的,較高的閾值可能導致過分簡化的樹,而較低的閾值可能使得樹的簡化太少。
2)後剪枝:
它由完全生長的樹剪去子樹,通過刪除節點的分支,並用樹葉替換它而剪掉給定節點的子樹,樹葉用被替換的子樹中最頻繁的類標記。
其中c4.5使用悲觀剪枝方法,CART則爲代價複雜度剪枝算法(後剪枝)。


悲觀剪枝法的基本思路是:設訓練集生成的決策樹是T,用T來分類訓練集中的N的元組,設K爲到達某個葉子節點的元組個數,其中分類錯誤地個數爲J。由於樹T是由訓練集生成的,是適合訓練集的,因此J/K不能可信地估計錯誤率。所以用(J+0.5)/K來表示。設S爲T的子樹,其葉節點個數爲L(s), image爲到達此子樹的葉節點的元組個數總和,image 爲此子樹中被錯誤分類的元組個數之和。在分類新的元組時,則其錯誤分類個數爲image ,其標準錯誤表示爲:image  。當用此樹分類訓練集時,設E爲分類錯誤個數,當下面的式子成立時,則刪掉子樹S,用葉節點代替,且S的子樹不必再計算。

   image      。


6、隨機森林
在機器學習中,隨機森林由許多的決策樹組成,因爲這些決策樹的形成採用了隨機的方法,因此也叫做隨機決策樹。隨機森林中的樹之間是沒有關聯的。當測試數據進入隨機森林時,其實就是讓每一顆決策樹進行分類,最後取所有決策樹中分類結果最多的那類爲最終的結果。因此隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的衆數而定。隨機森林可以既可以處理屬性爲離散值的量,如ID3算法,也可以處理屬性爲連續值的量,比如C4.5算法。另外,隨機森林還可以用來進行無監督學習聚類和異常點檢測。
6.1 理論描述
隨機森林由決策樹組成,決策樹實際上是將空間用超平面進行劃分的一種方法,每次分割的時候,都將當前的空間一分爲二,如說下面的決策樹,其屬性的值都是連續的實數,如圖1所示。將空間劃分爲成的樣子如圖2所示(注:所使用圖片來自於網絡)。

圖1                                                                  

圖2
隨機森林比較適合做多分類問題,訓練和預測速度快;同時,對訓練數據的容錯能力,是一種有效地估計缺失數據的一種方法,當數據集中有大比例的數據缺失時仍然可以保持精度不變和能夠有效地處理大的數據集;可以處理沒有刪減的成千上萬的變量;能夠在分類的過程中可以生成一個泛化誤差的內部無偏估計;能夠檢測到特徵之間的相互影響以及重要性程度;不過出現過度擬合;實現簡單容易並行化。

6.2 RF生成過程
具體決策樹的生成過程如下所示:

其中關於信息增益這裏就不作具體的介紹,反正信息增益越大,就說明那個屬性相對來說越重要。流程圖中的identical values 可以理解爲是分類值,離散值,就是它本身不具備數值的意義,比如說顏色分爲紅,綠,藍等,是人爲給它標定的一個離散值而已。流程圖中的real values可以理解爲連續的實數,也就是說屬性本身是具有數值的,比如說物體的長度,這就是一個real value,在進行這種連續值屬性構造決策數時,需要按照屬性值的範圍進行生成子節點。

6.3 RF構造過程
當可以生成好決策樹後,就比較容易生成隨機森林了。接下來是隨機森林的構造過程,如下所示:

第一、假如有N個樣本,則有放回的隨機選擇N個樣本(每次隨機選擇一個樣本,然後返回繼續選擇)。這選擇好了的N個樣本用來訓練一個決策樹,作爲決策樹根節點處的樣本。

第二、當每個樣本有M個屬性時,在決策樹的每個節點需要分裂時,隨機從這M個屬性中選取出m個屬性,滿足條件m << M。然後從這m個屬性中採用某種策略(比如說信息增益)來選擇1個屬性作爲該節點的分裂屬性。

第三、決策樹形成過程中每個節點都要按照步驟2來分裂(很容易理解,如果下一次該節點選出來的那一個屬性是剛剛其父節點分裂時用過的屬性,則該節點已經達到了葉子節點,無須繼續分裂了)。一直到不能夠再分裂爲止。注意整個決策樹形成過程中沒有進行剪枝。

最後、按照步驟1~3建立大量的決策樹,這樣就構成了隨機森林了。

從上面的步驟可以看出,隨機森林的隨機性體現在每顆數的訓練樣本是隨機的,樹中每個節點的分類屬性也是隨機選擇的。有了這2個隨機的保證,隨機森林就不會產生過擬合的現象了。

隨機森林有2個參數需要人爲控制,一個是森林中樹的數量,一般建議取很大。另一個是m的大小,推薦m的值爲M的均方根。

7、GBDT

此處,請僅關注GBDT的流程那個例子

一、 DT:迴歸樹 Regression Decision Tree

提起決策樹(DT, Decision Tree) 絕大部分人首先想到的就是C4.5分類決策樹。但如果一開始就把GBDT中的樹想成分類樹,那就是一條歪路走到黑,一路各種坑,最終摔得都要咯血了還是一頭霧水說的就是LZ自己啊有木有。咳嗯,所以說千萬不要以爲GBDT是很多棵分類樹。決策樹分爲兩大類,迴歸樹和分類樹。前者用於預測實數值,如明天的溫度、用戶的年齡、網頁的相關程度;後者用於分類標籤值,如晴天/陰天/霧/雨、用戶性別、網頁是否是垃圾頁面。這裏要強調的是,前者的結果加減是有意義的,如10歲+5歲-3歲=12歲,後者則無意義,如男+男+女=到底是男是女? GBDT的核心在於累加所有樹的結果作爲最終結果,就像前面對年齡的累加(-3是加負3),而分類樹的結果顯然是沒辦法累加的,所以GBDT中的樹都是迴歸樹,不是分類樹,這點對理解GBDT相當重要(儘管GBDT調整後也可用於分類但不代表GBDT的樹是分類樹)。那麼迴歸樹是如何工作的呢?

 

下面我們以對人的性別判別/年齡預測爲例來說明,每個instance都是一個我們已知性別/年齡的人,而feature則包括這個人上網的時長、上網的時段、網購所花的金額等。

 

作爲對比,先說分類樹,我們知道C4.5分類樹在每次分枝時,是窮舉每一個feature的每一個閾值,找到使得按照feature<=閾值,和feature>閾值分成的兩個分枝的熵最大的feature和閾值(熵最大的概念可理解成儘可能每個分枝的男女比例都遠離1:1),按照該標準分枝得到兩個新節點,用同樣方法繼續分枝直到所有人都被分入性別唯一的葉子節點,或達到預設的終止條件,若最終葉子節點中的性別不唯一,則以多數人的性別作爲該葉子節點的性別。

 

迴歸樹總體流程也是類似,不過在每個節點(不一定是葉子節點)都會得一個預測值,以年齡爲例,該預測值等於屬於這個節點的所有人年齡的平均值。分枝時窮舉每一個feature的每個閾值找最好的分割點,但衡量最好的標準不再是最大熵,而是最小化均方差--即(每個人的年齡-預測年齡)^2 的總和 / N,或者說是每個人的預測誤差平方和 除以 N。這很好理解,被預測出錯的人數越多,錯的越離譜,均方差就越大,通過最小化均方差能夠找到最靠譜的分枝依據。分枝直到每個葉子節點上人的年齡都唯一(這太難了)或者達到預設的終止條件(如葉子個數上限),若最終葉子節點上人的年齡不唯一,則以該節點上所有人的平均年齡做爲該葉子節點的預測年齡。若還不明白可以Google "Regression Tree",或閱讀本文的第一篇論文中Regression Tree部分。

 

二、 GB:梯度迭代 Gradient Boosting

好吧,我起了一個很大的標題,但事實上我並不想多講Gradient Boosting的原理,因爲不明白原理並無礙於理解GBDT中的Gradient Boosting。喜歡打破砂鍋問到底的同學可以閱讀這篇英文wikihttp://en.wikipedia.org/wiki/Gradient_boosted_trees#Gradient_tree_boosting

 

Boosting,迭代,即通過迭代多棵樹來共同決策。這怎麼實現呢?難道是每棵樹獨立訓練一遍,比如A這個人,第一棵樹認爲是10歲,第二棵樹認爲是0歲,第三棵樹認爲是20歲,我們就取平均值10歲做最終結論?--當然不是!且不說這是投票方法並不是GBDT,只要訓練集不變,獨立訓練三次的三棵樹必定完全相同,這樣做完全沒有意義。之前說過,GBDT是把所有樹的結論累加起來做最終結論的,所以可以想到每棵樹的結論並不是年齡本身,而是年齡的一個累加量。GBDT的核心就在於,每一棵樹學的是之前所有樹結論和的殘差,這個殘差就是一個加預測值後能得真實值的累加量。比如A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差爲6歲。那麼在第二棵樹裏我們把A的年齡設爲6歲去學習,如果第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;如果第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹裏A的年齡就變成1歲,繼續學。這就是Gradient Boosting在GBDT中的意義,簡單吧。

 

三、 GBDT工作過程實例。

還是年齡預測,簡單起見訓練集只有4個人,A,B,C,D,他們的年齡分別是14,16,24,26。其中A、B分別是高一和高三學生;C,D分別是應屆畢業生和工作兩年的員工。如果是用一棵傳統的迴歸決策樹來訓練,會得到如下圖1所示結果:

現在我們使用GBDT來做這件事,由於數據太少,我們限定葉子節點做多有兩個,即每棵樹都只有一個分枝,並且限定只學兩棵樹。我們會得到如下圖2所示結果:

在第一棵樹分枝和圖1一樣,由於A,B年齡較爲相近,C,D年齡較爲相近,他們被分爲兩撥,每撥用平均年齡作爲預測值。此時計算殘差(殘差的意思就是: A的預測值 + A的殘差 = A的實際值),所以A的殘差就是16-15=1(注意,A的預測值是指前面所有樹累加的和,這裏前面只有一棵樹所以直接是15,如果還有樹則需要都累加起來作爲A的預測值)。進而得到A,B,C,D的殘差分別爲-1,1,-1,1。然後我們拿殘差替代A,B,C,D的原值,到第二棵樹去學習,如果我們的預測值和它們的殘差相等,則只需把第二棵樹的結論累加到第一棵樹上就能得到真實年齡了。這裏的數據顯然是我可以做的,第二棵樹只有兩個值1和-1,直接分成兩個節點。此時所有人的殘差都是0,即每個人都得到了真實的預測值。

 

換句話說,現在A,B,C,D的預測值都和真實年齡一致了。Perfect!:

A: 14歲高一學生,購物較少,經常問學長問題;預測年齡A = 15 – 1 = 14

B: 16歲高三學生;購物較少,經常被學弟問問題;預測年齡B = 15 + 1 = 16

C: 24歲應屆畢業生;購物較多,經常問師兄問題;預測年齡C = 25 – 1 = 24

D: 26歲工作兩年員工;購物較多,經常被師弟問問題;預測年齡D = 25 + 1 = 26 

 

那麼哪裏體現了Gradient呢?其實回到第一棵樹結束時想一想,無論此時的cost function是什麼,是均方差還是均差,只要它以誤差作爲衡量標準,殘差向量(-1, 1, -1, 1)都是它的全局最優方向,這就是Gradient。


參考文獻:
http://www.cnblogs.com/superhuake/archive/2012/07/25/2609124.html

http://blog.csdn.net/ljp812184246/article/details/47402639

http://www.cnblogs.com/chaoren399/p/4847462.html

http://blog.csdn.net/songzitea/article/details/10035757


--------------------- 


原文:https://blog.csdn.net/gumpeng/article/details/51397737 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章