1. 程式人生 > >迭代決策樹GBRT(漸進梯度迴歸樹)

迭代決策樹GBRT(漸進梯度迴歸樹)

一、決策樹模型組合

單決策樹C4.5由於功能太簡單,並且非常容易出現過擬合的現象,於是引申出了許多變種決策樹,就是將單決策樹進行模型組合,形成多決策樹,比較典型的就是迭代決策樹GBRT和隨機森林RF。 在最近幾年的paper上,如iccv這種重量級會議,iccv 09年的裡面有不少文章都是與Boosting和隨機森林相關的。模型組合+決策樹相關演算法有兩種比較基本的形式:隨機森林RF與GBDT,其他比較新的模型組合+決策樹演算法都是來自這兩種演算法的延伸。 核心思想:其實很多“漸進梯度” Gradient Boost都只是一個框架,裡面可以套用很多不同的演算法。

首先說明一下,GBRT這個演算法有很多名字,但都是同一個演算法: GBRT (Gradient BoostRegression Tree) 漸進梯度迴歸樹 GBDT (Gradient BoostDecision Tree) 漸進梯度決策樹 MART (MultipleAdditive Regression Tree) 多決策迴歸樹 Tree Net決策樹網路

二、GBRT

迭代決策樹演算法,在阿里內部用得比較多(所以阿里演算法崗位面試時可能會問到),由多棵決策樹組成,所有樹的輸出結果累加起來就是最終答案。它在被提出之初就和SVM一起被認為是泛化能力(generalization)較強的演算法。近些年更因為被用於搜尋排序的機器學習模型而引起大家關注。

GBRT是迴歸樹,不是分類樹。其核心就在於,每一棵樹是從之前所有樹的殘差中來學習的。為了防止過擬合,和Adaboosting一樣,也加入了boosting這一項。

提起決策樹(DT, DecisionTree)不要只想到C4.5單分類決策樹,GBRT不是分類樹而是迴歸樹! 決策樹分為迴歸樹分類樹

迴歸樹用於預測實數值,如明天溫度、使用者年齡

分類樹用於分類標籤值,如晴天/陰天/霧/雨、使用者性別

注意前者結果加減是有意義的,如10歲+5歲-3歲=12歲,後者結果加減無意義,如男+女=到底是男還是女?GBRT的核心在於累加所有樹的結果作為最終結果,而分類樹是沒有辦法累加的。所以GBDT中的樹都是迴歸樹而非分類樹。

第一棵樹是正常的,之後所有的樹的決策全是由殘差(此次的值與上次的值之差)來作決策。

三、演算法原理

0.給定一個初始值

1.建立M棵決策樹(迭代M次)

2.對函式估計值F(x)進行Logistic變換

3.對於K各分類進行下面的操作(其實這個for迴圈也可以理解為向量的操作,每個樣本點xi都對應了K種可能的分類yi,所以yi,F(xi),p(xi)都是一個K維向量)

4.求得殘差減少的梯度方向

5.根據每個樣本點x,與其殘差減少的梯度方向,得到一棵由J個葉子節點組成的決策樹

6.當決策樹建立完成後,通過這個公式,可以得到每個葉子節點的增益(這個增益在預測時候用的)

每個增益的組成其實也是一個K維向量,表示如果在決策樹預測的過程中,如果某個樣本點掉入了這個葉子節點,則其對應的K個分類的值是多少。比如GBDT得到了三棵決策樹,一個樣本點在預測的時候,也會掉入3個葉子節點上,其增益分別為(假設為3分類問題): (0.5, 0.8, 0.1), (0.2, 0.6, 0.3), (0.4, .0.3, 0.3),那麼這樣最終得到的分類為第二個,因為選擇分類2的決策樹是最多的。

7.將當前得到的決策樹與之前的那些決策樹合併起來,作為一個新的模型(跟6中的例子差不多)

四、GBRT適用範圍

該版本的GBRT幾乎可用於所有的迴歸問題(線性/非線性),相對logistic regression僅能用於線性迴歸,GBRT的適用面非常廣。亦可用於二分類問題(設定閾值,大於閾值為正例,反之為負例)。

五、搜尋引擎排序應用RANKNET

搜尋排序關注各個doc的順序而不是絕對值,所以需要一個新的cost function,而RankNet基本就是在定義這個cost function,它可以相容不同的演算法(GBDT、神經網路...)。

實際的搜尋排序使用的是Lambda MART演算法,必須指出的是由於這裡要使用排序需要的cost function,LambdaMART迭代用的並不是殘差。Lambda在這裡充當替代殘差的計算方法,它使用了一種類似Gradient*步長模擬殘差的方法。這裡的MART在求解方法上和之前說的殘差略有不同。

搜尋排序也需要訓練集,但多數用人工標註實現,即對每個(query, doc)pair給定一個分值(如1, 2, 3, 4),分值越高越相關,越應該排到前面。RankNet就是基於此制定了一個學習誤差衡量方法,即cost function。RankNet對任意兩個文件A,B,通過它們的人工標註分差,用sigmoid函式估計兩者順序和逆序的概率P1。然後同理用機器學習到的分差計算概率P2(sigmoid的好處在於它允許機器學習得到的分值是任意實數值,只要它們的分差和標準分的分差一致,P2就趨近於P1)。這時利用P1和P2求的兩者的交叉熵,該交叉熵就是cost function。

有了cost function,可以求導求Gradient,Gradient即每個文件得分的一個下降方向組成的N維向量,N為文件個數(應該說是query-doc pair個數)。這裡僅僅是把”求殘差“的邏輯替換為”求梯度“。每個樣本通過Shrinkage累加都會得到一個最終得分,直接按分數從大到小排序就可以了。