加法模型公式:html
其中,爲基函數,
爲基函數參數,
爲基函數係數, 表示該項函數在加法模型中的重要性node
在給定訓練數據和損失函數L(y,f(x))的條件下,學習加法模型成爲經驗風險極小化 (即損失函數極小化問題) 算法
大牛 Freidman 提出了用損失函數的負梯度來擬合本輪損失的近似值,進而擬合一個 CART 迴歸樹。第 t 輪的第 i 個樣本的損失函數的負梯度表示爲: dom
從而本輪最終獲得的強學習器的表達式以下:機器學習
經過損失函數的負梯度來擬合,咱們找到了一種通用的擬合損失偏差的辦法,這樣無輪是分類問題仍是迴歸問題,咱們經過其損失函數的負梯度的擬合,就能夠用 GBDT 來解決咱們的分類迴歸問題。區別僅僅在於損失函數不一樣致使的負梯度不一樣而已。函數
不一樣問題對應的損失函數不一樣,這篇博客作了一個很好的總結。後續對應不一樣的問題會有不一樣的損失函數。 梯度提高樹 (GBDT) 原理小結學習
對於二元 GBDT,若是用相似於邏輯迴歸的對數似然損失函數,則損失函數爲:優化
其中 。則此時的負梯度偏差爲 spa
除了負梯度計算和葉子節點的最佳負梯度擬合的線性搜索,二元 GBDT 分類和 GBDT 迴歸算法過程相同。.net
多元 GBDT 要比二元 GBDT 複雜一些,對應的是多元邏輯迴歸和二元邏輯迴歸的複雜度差異。假設類別數爲 K,則此時咱們的對數似然損失函數爲:
其中若是樣本輸出類別爲 k,則 。第 k 類的機率
的表達式爲:
集合上兩式,咱們能夠計算出第 輪的第
個樣本對應類別
的負梯度偏差爲
除了負梯度計算和葉子節點的最佳負梯度擬合的線性搜索,多元 GBDT 分類和二元 GBDT 分類以及 GBDT 迴歸算法過程相同。
和 Adaboost 同樣,咱們也須要對 GBDT 進行正則化,防止過擬合。GBDT 的正則化主要有三種方式。
• 第一種是和 Adaboost 相似的正則化項,即步長 (learning rate)。定義爲 , 對於前面的弱學習器的迭代
若是咱們加上了正則化項,則有
的取值範圍爲
。對於一樣的訓練集學習效果,較小的
意味着咱們須要更多的弱學習器的迭代次數。一般咱們用步長和迭代最大次數一塊兒來決定算法的擬合效果。
• 第二種正則化的方式是經過子採樣比例(subsample)。取值爲 (0,1]。注意這裏的子採樣和隨機森林不同,隨機森林使用的是放回抽樣,而這裏是不放回抽樣。若是取值爲 1,則所有樣本都使用,等於沒有使用子採樣。若是取值小於 1,則只有一部分樣本會去作 GBDT 的決策樹擬合。選擇小於 1 的比例能夠減小方差,即防止過擬合,可是會增長樣本擬合的誤差,所以取值不能過低。推薦在0.5, 0.8 之間。 使用了子採樣的 GBDT 有時也稱做隨機梯度提高樹(Stochastic Gradient Boosting Tree, SGBT)。因爲使用了子採樣,程序能夠經過採樣分發到不一樣的任務去作 boosting 的迭代過程,最後造成新樹,從而減小弱學習器難以並行學習的弱點。
• 第三種是對於弱學習器即 CART 迴歸樹進行正則化剪枝。
class sklearn.ensemble.GradientBoostingClassifier(loss='deviance', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto', validation_fraction=0.1, n_iter_no_change=None, tol=0.0001)[source]¶
複製代碼
幾個主要參數:
loss
: {‘deviance’, ‘exponential’}, optional (default=’deviance’) loss function to be optimized. ‘deviance’ refers to deviance (= logistic regression) for classification with probabilistic outputs. For loss ‘exponential’ gradient boosting recovers the AdaBoost algorithm. 損失函數learning_rate
: 學習率n_estimators
: int (default=100)弱學習器的個數因爲缺少這方面的經驗,故此部分不做贅述。 查到了一篇文章: GBDT 入門教程之原理、所解決的問題、應用場景講解