一、主要內容算法
介紹提高樹模型以及梯度提高樹的算法流程函數
二、Boosting Tree學習
提高樹模型採用加法模型(基函數的線性組合)與前向分步算法,同時基函數採用決策樹算法,對待分類問題採用二叉分類樹,對於迴歸問題採用二叉迴歸樹。提高樹模型能夠看做是決策樹的加法模型:spa
其中T()表示決策樹,M爲樹的個數, Θ表示決策樹的參數;blog
提高樹算法採用前向分部算法。首先肯定f0(x) = 0,第m步的模型是:學習方法
對決策樹的參數Θ的肯定採用經驗風險最小化來肯定:方法
對於不一樣的問題採用的損失函數不一樣,在決策樹中使用的就是0/1損失函數,這部分的推導和前面的adaBoost中的關於分類的推導相同,不作詳細介紹。對與迴歸問題來講,通常採用平方偏差函數。im
對於迴歸問題,關於迴歸樹的生成能夠參考CART算法中迴歸樹的生成。對於如下問題:統計
輸入:經驗
輸出:fM(x)
對於一顆迴歸樹能夠表示爲:
那麼在前向分步算法的第m步中也就是求解第m個迴歸樹模型時,爲了肯定參數須要求解:
當採用平方偏差損失函數時,損失函數爲:
將上面的待求解式子帶入到下面的平方偏差函數中能夠獲得如下表達式:
這就代表每一次進行迴歸樹生成時採用的訓練數據都是上次預測結果與訓練數據值之間的殘差。這個殘差會逐漸的減少。
算法流程:
(1)、初始化f0(x) = 0;
(2)、對於m=1,2,...,M
(a)按照 r= yi - fm-1(x)計算殘差做爲新的訓練數據的 y
(b) 擬合殘差 r 學習一顆迴歸樹,獲得這一輪的迴歸樹
(c) 更新
(3) 獲得迴歸提高樹:
三、GBDT梯度提高樹
對於梯度提高樹其學習流程與提高樹相似只是再也不使用殘差做爲新的訓練數據而是使用損失函數的梯度做爲新的新的訓練數據的y值,具體的來講就是使用損失函數對f(x)求梯度而後帶入fm-1(x)計算:
GDBT與提高樹之間的關係:
提高樹模型每一次的提高都是靠上次的預測結果與訓練數據的label值差值做爲新的訓練數據進行從新訓練,GDBT則是將殘差計算替換成了損失函數的梯度方向,將上一次的預測結果帶入梯度中求出本輪的訓練數據,這兩種模型就是在生成新的訓練數據時採用了不一樣的方法,那麼在這個背後有啥區別?使用殘差有啥很差?
李航老師《統計學習方法》中提到了在使用平方偏差損失函數和指數損失函數時,提高樹的殘差求解比較簡單,可是在使用通常的損失偏差函數時,殘差求解起來不是那麼容易,因此就是用損失函數的負梯度在當前模型的值做爲迴歸問題中殘差的近似值。 這是否是說通常的損失函數的梯度也得好求才能夠啊。