gbdt(gradient boosting decision tree)梯度提公升決策樹,是屬於boosting整合演算法的一類。bagging演算法是每個個體學習器的樣本是存在差異的,但是boosting每個個體學習器的樣本是不變,但是每次迭代的樣本權重是不同的。adabost演算法也是boosting演算法之一,它是根據上一次的誤差修改此次訓練的樣本權重,不斷的迭代實現誤差接近於零。而gbdt演算法採用前向分布演算法。
輸入資料: 訓練資料集t =;損失函式l(y, f(x));基函式集;
輸出: 加法模型f(x)
因此,前向分布演算法將同時求解從m=1到m的所有引數βm, rm的優化問題簡化為逐次求解各個βm, rm的優化問題。
gbdt的梯度提公升體現在構建cart樹所需的負梯度階段,這個時候基學習器擬合前一輪模型損失函式的負梯度,而不是殘差,殘差是損失函式的其中一種情況,因此負梯度也被稱為「響應 (response)」或「偽殘差 (pseudo residual)」,從名字可以看出是乙個與殘差接近的概念。
1.分類問題損失函式
對於分類演算法,其損失函式一般有對數損失函式和指數損失函式兩種:
(1)如果是指數損失函式,則損失函式表示式為
(2)如果是對數損失函式,分為二元分類和多元分類兩種,
對於二元分類
2.回歸問題損失函式
對於回歸演算法,常用損失函式有如下4種:
(1)均方差,這個是最常見的回歸損失函式了
(2)絕對損失,這個損失函式也很常見
(3)huber損失,它是均方差和絕對損失的折衷產物,對於遠離中心的異常點,採用絕對損失,而中心附近的點採用均方差。這個界限一般用分位數點度量。
(4)分位數損失。它對應的是分位數回歸的損失函式。
回歸,指研究一組隨機變數(y1 ,y2 ,…,yi)和另一組(x1,x2,…,xk)變數之間關係的統計分析方法,又稱多重回歸分析。通常y1,y2,…,yi是因變數,x1、x2,…,xk是自變數。
輸入:訓練樣本 d=d=,最大迭代次數(基學習器數量) t,損失函式 l
輸出:強學習器 h(x)
演算法流程:
對於二元gbdt,如果用類似於邏輯回歸的對數似然損失函式,則損失函式為:
對於生成的決策樹,我們各個葉子節點的最佳殘差擬合值為 :
由於上式比較難優化,我們一般使用近似值代替:
除了負梯度計算和葉子節點的最佳殘差擬合的線性搜尋,二元gbdt分類和gbdt回歸演算法過程相同。
gbdt主要的優點有:
可以靈活處理各種型別的資料,包括連續值和離散值。
在相對少的調參時間情況下,**的準確率也可以比較高。這個是相對svm來說的。
使用一些健壯的損失函式,對異常值的魯棒性非常強。比如 huber損失函式和quantile損失函式。
gbdt的主要缺點有:
由於弱學習器之間存在依賴關係,難以並行訓練資料。不過可以通過自取樣的sgbt來達到部分並行。
在sacikit-learn中,gradientboostingclassifier為gbdt的分類類, 而gradientboostingregressor為gbdt的回歸類。兩者的引數型別完全相同,當然有些引數比如損失函式loss的可選擇項並不相同。這些引數中,類似於adaboost,我們把重要引數分為兩類,第一類是boosting框架的重要引數,第二類是弱學習器即cart回歸樹的重要引數。
n_estimators: 也就是弱學習器的最大迭代次數,或者說最大的弱學習器的個數。一般來說n_estimators太小,容易欠擬合,n_estimators太大,又容易過擬合,一般選擇乙個適中的數值。預設是100。在實際調參的過程中,我們常常將n_estimators和下面介紹的引數learning_rate一起考慮。
learning_rate: 即每個弱學習器的權重縮減係數νν,也稱作步長,在原理篇的正則化章節我們也講到了,加上了正則化項,我們的強學習器的迭代公式為fk(x)=fk−1(x)+νhk(x)fk(x)=fk−1(x)+νhk(x)。νν的取值範圍為0
subsample: 即我們在原理篇的正則化章節講到的子取樣,取值為(0,1]。注意這裡的子取樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子取樣。如果取值小於1,則只有一部分樣本會去做gbdt的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間,預設是1.0,即不使用子取樣。
init: 即我們的初始化的時候的弱學習器,擬合對應原理篇裡面的f0(x)f0(x),如果不輸入,則用訓練集樣本來做樣本集的初始化分類回歸**。否則用init引數提供的學習器做初始化分類回歸**。一般用在我們對資料有先驗知識,或者之前做過一些擬合的時候,如果沒有的話就不用管這個引數了。
loss: 即我們gbdt演算法中的損失函式。分類模型和回歸模型的損失函式是不一樣的。
對於分類模型,有對數似然損失函式"deviance"和指數損失函式"exponential"兩者輸入選擇。預設是對數似然損失函式"deviance"。在原理篇中對這些分類損失函式有詳細的介紹。一般來說,推薦使用預設的"deviance"。它對二元分離和多元分類各自都有比較好的優化。而指數損失函式等於把我們帶到了adaboost演算法。
對於回歸模型,有均方差"ls", 絕對損失"lad", huber損失"huber"和分位數損失「quantile」。預設是均方差"ls"。一般來說,如果資料的噪音點不多,用預設的均方差"ls"比較好。如果是噪音點較多,則推薦用抗噪音的損失函式"huber"。而如果我們需要對訓練集進行分段**的時候,則採用「quantile」。
alpha:這個引數只有gradientboostingregressor有,當我們使用huber損失"huber"和分位數損失「quantile」時,需要指定分位數的值。預設是0.9,如果噪音點較多,可以適當降低這個分位數的值。
業界中,facebook使用其來自動發現有效的特徵、特徵組合,來作為lr模型中的特徵,以提高 ctr預估(click-through rate prediction)的準確性;gbdt在**的搜尋及**業務上也發揮了重要作用
梯度提公升樹(gbdt)原理小結
scikit-learn 梯度提公升樹(gbdt)調參小結
機器學習演算法梳理—gbdt演算法
演算法梳理五:gbdt
GBDT演算法梳理
table of contents 1 gbdt概述 2 前向分布演算法 2.1 加法模型 2.2 前向分布演算法 2.2.1 思想 2.2.2 策略 2.2.3 加法模型求解 3 損失函式 4 負梯度擬合 5 回歸 6 gbdt分類 6.1 二分類 6.2 多分類 7 正則化 8 優缺點 9 sk...
GBDT演算法梳理
人工智慧之gbdt演算法 前言 人工智慧之機器學習主要有三大類 1 分類 2 回歸 3 聚類。今天我們重點 一下gbdt演算法。我們知道,gbm 請參見人工智慧 51 是乙個改善弱學習器效果的計算框架。gbm梯度提公升模組可以根據需要任意插入各種各樣的弱分類器。若弱學習器限定了只能使用cart回歸樹...
gbdt演算法 演算法梳理五 GBDT
真正開始動手寫,才發現以前理解的不夠深。弄懂乙個演算法,要想明白哪些問題?集合裡有m個樣本,n個特徵,gbdt每棵回歸樹怎麼構造 選取多少樣本,多少特徵 它的損失函式怎麼擬合,殘差是怎麼回事,梯度在其中的作用。gbdt有很多簡稱,有gbt gradient boosting tree gtb gra...