機器學習(五) GBDT演算法

2021-09-05 09:20:32 字數 3137 閱讀 5026

gbdt也是整合學習boosting家族的成員,gbdt也是迭代,使用了前向分布演算法,但是弱學習器限定了只能使用cart回歸樹模型。在gbdt的迭代中,假設我們前一輪迭代得到的強學習器是 f t-1(x),損失函式是l(y,ft-1(x)),我們本輪迭代的目標是找到乙個cart回歸樹模型的弱學習器ht(x),讓本輪的損失函式l(y,ft(x))=l(y,ft-1(x)+ht(x))最小。也就是說,本輪迭代找到決策樹,要讓樣本的損失盡量變得更小。

gbdt演算法在回歸問題上,損失函式是(1)均方差「ls」,這個是最常見的回歸損失函式(2)絕對損失「lab」(3)huber損失「huber」,它是均方差和絕對損失的折中產物,對於遠離中心的異常點,採用絕對損失,而中心附近的點採用均方差。這個界限一般用分位數點度量。(4)分位數損失」quantile「,對應的是分位數回歸的損失函式。對於huber損失和分位數損失,主要用於健壯回歸,也就是減少異常點對損失函式的影響。

在分類問題上,損失函式是(1)對數損失函式」deviance「

(2)指數損失函式」exponential「

gbdt的正則化,和adaboost一樣,我們也需要對gbdt進行正則化,防止過擬合。正則化有三種:

(1)類似adaboost的正則化,即步長(learning_rate)。對於同樣的訓練集學習效果,較小的v意味著我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代次數一起來決定演算法的擬合效果。

(2)通過子取樣比例(subsample)。注意這裡的子取樣和隨機森林的不一樣,隨機森林使用的放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子取樣。如果取值小於1,則只有一部分樣本會去做gbdt的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在【0.5,0.8】。

(3)對弱學習器即cart回歸樹進行正則化剪枝。

在scikit-learn中,gradientboostingclassifier為gbdt的分類類,而gradientboostingregressor為gbdt的回歸類。兩者引數型別不完全相同,但是有些引數比如損失函式loss的選擇並不相同。(並且回歸類多了乙個alpha)

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)

class sklearn.ensemble.gradientboostingregressor(loss="ls", 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, alpha=0.9, verbose=0,

max_leaf_nodes=none,warm_start=false, presort="auto", validation_fraction=0.1,

n_iter_no_change=none, tol=0.0001) 

(1)n_estimators:弱學習器的最大迭代次數,或者數是最大的弱學習器的個數。一般來說,該引數太小,容易欠擬合,太大,容易過擬合。預設是100,在實際應用過程中,我們常常將n_estimators和learning_rate一起考慮。

(2)learning_rate:即每個弱學習器的權重縮減係數,也稱為步長,在原理篇正則化章節中,加上正則化項,我們強學習器的迭代公式為fk(x)=fk-1(x)+vhk(x)。v的取值範圍為0(3)subsample:子取樣,取值為(0,1]。這裡的子取樣和隨機森林的子取樣不一樣,隨機森林使用的是放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子取樣;如果取值小於1,則只有一部分樣本去做gbdt的決策樹0擬合。選擇小於1的比例可以減少方差,即防止過擬合,但不能取值過低,會增加樣本擬合的偏差。推薦在【0.5,0.8】之間,預設為1,即不使用子取樣。

(4)init:即我們初始化的時候的弱學習器,對應原理篇裡面的f0(x),如果不輸入,則用訓練集樣本來做樣本集的初始化分類回歸**。否則用init引數提供的學習器做初始化分類回歸**。一般用在我們對資料有先驗知識,或者之前做過一些擬合的時候,如果沒有的話,就不用管這個引數。

(5)loss:損失函式,分類模型和回歸模型是不一樣的。

分類模型:有對數似然損失函式「deviance」和指數損失函式「exponential」兩種。預設的是對數似然損失函式「deviance」。一般來說,推薦使用預設的損失函式。它對二元分類和多元分類都有比較好的優化。而指數損失函式等於把我們帶到了adaboost演算法。

回歸模型:有均方差「ls」,絕對損失「lab」,huber損失「huber」和分位數損失「quantile」。預設的是均方差「ls」。一般來說,如果資料的噪音點不多,用預設的「ls」比較好。如果是噪音點較多,則推薦用抗噪音的損失函式「huber」。如果我們需要對訓練集進行分段**的時候,則採用「quantile」。

(6)alpha:這個引數只有在gradientboostingregressor中有。當我們使用「huber」和「quantile」時,需要指定分位數的值。預設是0.9,如果噪音點較多,可以適當降低這個alpha值。

**:

機器學習 GBDT演算法梳理

學習任務 前向分步演算法 負梯度擬合 損失函式 回歸二分類,多分類 正則化優缺點 sklearn引數 應用場景 前言 提公升 boosting 方法是整合學習方法的一種,在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,將弱分類器組裝成乙個強分類器,提高分類的效能。其最具代表性的是adaboo...

gbdt演算法 演算法梳理五 GBDT

真正開始動手寫,才發現以前理解的不夠深。弄懂乙個演算法,要想明白哪些問題?集合裡有m個樣本,n個特徵,gbdt每棵回歸樹怎麼構造 選取多少樣本,多少特徵 它的損失函式怎麼擬合,殘差是怎麼回事,梯度在其中的作用。gbdt有很多簡稱,有gbt gradient boosting tree gtb gra...

機器學習 GBDT

在gbdt的迭代中,假設前一輪迭代得到的強學習器 ft 1 x f x ft 1 x 損失函式 l y ft 1 x l y,f x l y,ft 1 x 本輪迭代的目標是找到乙個cart回歸樹模型的弱學習器ht x h t x ht x 讓本輪的損失函式l y ft x l y,f t 1 x h...