從引數空間到函式空間理解GBDT+XGBoost
內容摘要
- 泰勒公式
- 最優化方法
- 梯度下降法
- 牛頓法
- 從引數空間到函式空間
- 從Gradient descend到Gradient boosting
- 從Newton's method到Newton Boosting
- Gradient boosting tree演算法原理
- Newton Boosting演算法原理
- LightGBM
泰勒公式
- 定義:是一個用函式在某點的資訊,描述其附近取值的公式。
-
基本形式:
其中一階泰勒展開式就是求一階導,二階展開式即求二階導。x0為已知,公式表示f(x)在x0附近的展開。
-
GDBT或是xgb都是一個引數迭代的過程,因此這裡表示一個迭代形式的泰勒函式:
假設
將f(x^t) 在x^(t-1)處進行展開:
梯度下降法(Gradient Descend Method)
機器學習中需要最小化損失函式L(θ),這個θ就是要求解的模型引數。GDM常用於求解無約束最優化問題,是一種迭代方法。初始話θ為θ^0,不斷迭代來更新θ的值,進行損失函式的極小化。
-
迭代公式 θ^t = θ^(t-1)+△θ
進行一階泰勒展開:要使得L(θ^t) < L(θ^(t-1)),則可取:
- 其中解釋一下為何△θ要取值為上式:首先明確,a的值為正,為了保證△θ恆為負數,則需要乘上L’(θ^t-1)先保證其為整數,再加上負號即可。
- 其實a就是我們常用的學習速率
- a如何選取?
對於這個問題其實有很多方法可以使用,如果考慮使用full gradient較為笨但是精確的方法是line search,但是其複雜度過高,因此通常我們選取一個很小的值即可例如0.01-0.1之間。
牛頓法
牛頓法就是求取二階泰勒展開:假設我們要求的引數θ是一維,則記一階導數為g,二階導數為h,那麼上式可表示為:
此時若求取L(θ^t) 的極小值,則令g△θ+h△θ^2/2極小,求取其一階導數為0時的△θ即可:
如果引數θ是向量形式,那麼可以向高維空間推廣,此時的h為H(海森矩陣)。
以上介紹的梯度下降和牛頓法均為引數空間的優化演算法
如何從引數空間推廣到函式空間呢?即從Gradient descend到Gradient boosting;從Newton's method到Newton Boosting
下面介紹GBDT和xgb中使用的函式空間的優化演算法,其基本原理還是梯度下降和牛頓法。
關係是這樣的:
GBDT泛指一切梯度提升樹,包括XGB。為了區分二者,可以利用其梯度下降的原理進行區分:
- GBDT在函式空間中利用梯度下降進行優化
- XGB在函式空間利用牛頓法進行優化
1. 梯度下降從引數空間到函式空間
其中對於函式空間,僅僅是將引數的擬合換為函式的擬合,每次仍然迭代的是一個負梯度,只是其最終得到的是增量函式的累加而不是增量引數累加。
GBDT裡,迭代項ft(x)就是我們的決策樹,最終將每棵決策樹的預測值(函式)加起來。
2. 牛頓法從引數空間到函式空間
對於牛頓法的函式空間優化,其方法類似於梯度下降的函式空間優化
3. boosting演算法小結
無論是梯度下降還是牛頓法,其函式空間上的boosting優化模型都看作是一類加法模型,相加的物件可以是一系列弱分類器或是迴歸樹。
4. 牛頓法小結
牛頓法是梯度下降的進一步優化,梯度下降利用目標函式的一階偏導資訊,以負梯度方向作為搜尋方向,只考慮目標函式在迭代點的區域性性質;而牛頓法不僅使用目標函式的一階偏導數,還進一步利用了目標函式的二階偏導,這樣就考慮了梯度變化的趨勢,因而能更全面地確定合適的搜尋方向以加快收斂。
GBDT原理分析
GBDT最早由Friedman提出,其核心是擬合前面迭代所留下來的殘差,使其達到最小。
-
模型F定義為一個加法模型:
其中x為輸入樣本,h為分類迴歸樹,w是分類迴歸樹的引數,a是每棵樹的權重。
-
通過最小化損失函式求解最優模型:
-
GBDT原是論文的演算法虛擬碼:
演算法的輸入(xi,yi)分別是樣本和lable,T為樣本個數,L為損失函式
- GBDT的學習過程是使得前面擬合的殘差達到最小,那麼首先計算殘差,即演算法中的2.1步,也稱為響應。
- 接著學習第t棵樹時就是尋找最新的殘差的最小值。可以看到lable yi變成了前t-1棵樹的殘差值。
然後尋找合適的步長(通常情況,不使用line search,而是手動給一個很小的值)
最後將第t棵樹與前t-1棵樹加起來,更新模型即可。
XGBoost原理
-
模型的函式形式
xgb同樣是一個加性模型,同樣是在學習多棵樹的結果並將其累加。f(x)就是每一棵樹。其中q(x)表示將樣本x分到了某個葉子節點上,w是葉子節點的分數,所以wq(x)就表示迴歸樹對樣本的預測值。
- 迴歸樹的預測輸出是一個實數的分數,因此可以用於迴歸和分類,以及排序等任務。
目標函式
-
首先回憶一下引數空間的目標函式:
實際上就是一個誤差函式+正則化項
其中誤差函式可以是平方誤差或是對數誤差等;正則化項可以是L1或L2
正則化項
wepon大神說道,正則化項的理解可以從貝葉斯先驗角度去理解。也就是說,如果引入L2,那麼就是假設模型引數服從正態分佈(相當於對引數加上了分佈約束),這樣一來就將引數的取值進行一定的限制,同時可以知道,正態分佈取0附近的概率最大,因此又將引數空間可能的範圍進一步縮小,模型最終學習出來的引數取值都在0附近。
-
現在來看函式空間的目標函式
其中正則化項是對每一棵樹的複雜度進行懲罰。
相比於GBDT,xgb目標函式就是多了一個正則化項。這樣的做法使得模型不易過擬合。
既然是對複雜度做懲罰,那麼樹的什麼特性可以反映複雜度?
- 樹的深度、內部節點個數、葉子節點個數,葉節點分數
xgb中選用了葉子節點個數(T),葉節點分數(w)來反映樹的複雜度,其複雜度定義如下:
看完正則化項後再來關心一下目標函式中的誤差函式
首先模型第t次迭代後將ft(x)與前t次的迭代結果進行相加,並代入目標函式,即式2,然後將誤差項在yt-1處進行二階展開,然後去掉常數項得到:
上面這個形式跟牛頓法的形式幾乎一樣,由於f在函式空間中是一個樹的形式,則將f寫為樹的結構:
代入目標函式中得到:
雖然現在loss函式可以求最小值了,但是公式的兩項並不統一,即:
如何將兩項進行統一以方便求導呢?因為樣本都會落在每一個節點上面,因此可以定義如下:
對每一個樣本都相應有一個gi和hi。從最終的公式可以看到,由於是按照葉子節點進行累加,所以相當於每一個葉子節點均有一個誤差函式,都要進行相應的誤差計算。
根據轉換後的損失函式,就可以求極小值了,前提是樹結構確定:相當於每一棵樹的最小損失都可以計算了。
既然前提是需要樹結構確定,那麼如何確定樹的結構?即如何確定樹節點的分裂方法?
- 可以暴力列舉全部的樹結構然後選擇損失最小的結構即可。明顯是一個NP問題。不現實!
貪心法:每次嘗試分裂一個葉節點,計算前後增益,選擇增益最大的保留。
那麼增益如何計算?
- xgb增益計算方法的演進:
- 初始版本:
這樣的方法相當於去遍歷所有可能分割的分割點,然後計算增益,最後選取最大的增益的分列方式去分割,明顯負責度太高!!
- 近似演算法:
對於每一個特徵,只考慮分位點,以減少複雜度,分位點的選取粒度有兩種:全域性global和區域性local。全域性速度快但是經度降低。
解釋一下:先將某特徵的特徵值從小到大排序,再選取分位點進行計算增益即可。
3. xgb中採用的樹節點分裂方法(增益計算)
如何看權重分位點的選取呢?上圖中前六個特徵值的權重之和為0.6,7-8的權重和為0.6,最後一個為0.6,就這選取權重之和相同的點來進行分位點的選取,然後再計算增益。
內容參考wepon大神天池直播
相關文章
- 函式呼叫與空間分配函式
- 從system/sysaux空間轉移TABLE&Index到其它表空間UXIndex
- 世界空間到觀察空間的矩陣矩陣
- Oracle表空間建立引數解析Oracle
- 理解UNDO表空間
- oracle expdp、impdp匯入從原表空間更換到其他表空間 ----匯入到另個表空間測試Oracle
- Python動態引數、名稱空間、函式巢狀、global和nonlocalPython函式巢狀
- 遷移使用者物件從一個表空間到另外表空間物件
- Oracle 表空間 建立引數 說明Oracle
- MySQL空間函式實現位置打卡MySql函式
- 傳輸表空間(從Linux到Windows)LinuxWindows
- PHP匿名函式使用use關鍵詞引用外部空間變數PHP函式變數
- 轉移表空間到ASMASM
- 查詢表空間已使用空間和空閒空間的簡單檢視
- MySQL空間最佳化(空間清理)MySql
- IMPDP 多個表空間物件匯入到一個表空間中物件
- 將表從一個表空間遷移到另外一個表空間
- 從零到一, 打造全新的遊戲次元空間遊戲
- 傳輸表空間自包含理解
- 分析表空間空閒率並收縮表空間
- C++名稱空間與友元函式薦C++函式
- Shell磁碟空間和表空間告警程式
- 極空間:從NAS行業革新者到引領者的進階之路行業
- 從000webhost空間被黑談使用免費空間的自我保護Web
- 歡迎來到devdede的空間!dev
- MySQL 引數- Innodb_File_Per_Table(獨立表空間)MySql
- 從物理空間到數字世界,數字孿生打造智慧化基礎設施
- Linux 核心空間與使用者空間Linux
- aardio教程四) 理解名字空間(namespace)namespace
- 環境變數和地址空間變數
- Oracle 本地表空間管理與字典表空間管理Oracle
- MySQL InnoDB 共享表空間和獨立表空間MySql
- 管理表空間(表空間的屬性)轉貼
- 表空間管理之bigfile表空間設定
- 遷移SYSTEM表空間為本地管理表空間
- MySQL InnoDB 共享表空間和獨立表空間MySql
- oracle查詢表空間的空間佔用情況Oracle
- 有限螢幕的無限空間 -從空間角度談移動介面擴充套件套件