100天搞定機器學習|Day60 遇事不決,XGBoost

↑↑↑點擊上方藍字,回覆資料,10個G的驚喜

100天搞定機器學習|Day59 主成分分析(PCA)原理及使用詳解

XGBoost 是一種集大成的機器學習算法,可用於迴歸,分類和排序等各種問題,在機器學習大賽及工業領域被廣泛應用。成功案例包括:網頁文本分類、顧客行爲預測、情感挖掘、廣告點擊率預測、惡意軟件分類、物品分類、風險評估、大規模在線課程退學率預測。

XGBoost是初學者最值得深度理解的模型之一,它將決策樹、boosting、GBDT 等知識點串聯起來,強烈建議大家都手擼一波。本文我將從XGBoost淵源及優點、模型原理及優化推導、XGBoost模型參數解析、調參實例,XGBoost可視化等方面介紹XGBoost。提醒一下,XGBoost 是在 GBDT 基礎上的改進,閱讀本文需對 GBDT 有一定的瞭解,不熟悉的同學可以看一下前篇:100天搞定機器學習|Day58 機器學習入門:硬核拆解GBDT

XGBoost淵源及優勢

在數據建模中,經常採用Boosting方法,該方法將成百上千個分類準確率較低的樹模型組合起來,成爲一個準確率很高的預測模型。這個模型會不斷地迭代,每次迭代就生成一顆新的樹。但在數據集較複雜的時候,可能需要幾千次迭代運算,這將造成巨大的計算瓶頸。

針對這個問題,華盛頓大學的陳天奇博士開發的XGBoost(eXtreme Gradient Boosting)基於C++通過多線程實現了迴歸樹的並行構建,並在原有Gradient Boosting算法基礎上加以改進,從而極大地提升了模型訓練速度和預測精度。

XGBoost 主要優勢如下

1、GBDT在優化時只用到一階導數信息,XGBoost同時用到了一階和二階導數,還支持自定義損失函數,前提是損失函數可一階和二階求導;

2、加入了正則項,用於控制模型的複雜度,防止過擬合;

3、借鑑了隨機森林的做法,支持列抽樣(隨機選擇特徵),不僅能降低過擬合,還能減少計算;

4、尋找最佳分割點時,實現了一種近似法,還考慮了稀疏數據集、缺失值的處理,大大提升算法的效率;

5、支持並行;

6、近似直方圖算法,用於高效地生成候選的分割點;

7、在算法實現時做了很多優化,大大提升了算法的效率,內存空間不夠時,利用了分塊、預取、壓縮、多線程協作的思想。

XGBoost模型原理及優化推導

XGBoost其實也是GBDT的一種,還是加性模型和前向優化算法。

加法模型就是說強分類器由一系列弱分類器線性相加而成。一般組合形式如下:

其中, 就是一個個的弱分類器, 是弱分類器學習到的最優參數, 就是弱學習在強分類器中所佔比重,P是所有 的組合。這些弱分類器線性相加組成強分類器。

前向分步就是說在訓練過程中,下一輪迭代產生的分類器是在上一輪的基礎上訓練得來的。也就是可以寫成這樣的形式:

XGBoost 的模型是什麼樣子的呢?

  • 其中 K 是樹的棵數。
  • 是迴歸樹, ,滿足
  • q表示每棵樹的結構,它會將一個訓練樣本實例映射到相對應的葉子索引上。
  • T是樹中的葉子數。
  • 每個對應於一個獨立的樹結構q和葉子權重w。
  • 是所有迴歸樹組成的函數空間。

與決策樹不同的是,每棵迴歸樹包含了在每個葉子上的一個連續分值,我們使用來表示第i個葉子上的分值。對於一個給定樣本實例,我們會使用樹上的決策規則(由q給定)來將它分類到葉子上,並通過將相應葉子上的分值(由w給定)做求和,計算最終的預測值。

XGBoost的學習

爲了在該模型中學到這些函數集合,我們會對下面的正則化目標函數做最小化

其中: 是損失函數,常見的有 2 種:
平方損失函數:
邏輯迴歸損失函數:

: 正則化項,用於懲罰複雜模型,避免模型過分擬合訓練數據。常用的正則有L1正則與L2正則:
L1正則(lasso):
L2正則:

下一步就是對目標函數進行學習,每一次保留原來的模型不變,加入一個新的函數 到我們的模型中。

其中, 爲第i個實例在第t次迭代時的預測,我們需要添加樹 ,然後最小化下面的目標函數:

假設損失函數使用的是平方損失 ,則上式進一步寫爲:

現在,我們採用泰勒展開來定義一個近似的目標函數:

其中:

分別是loss function上的一階梯度和二階梯度。

忘記基礎知識的同學順便重溫一下泰勒公式

泰勒公式(Taylor’s Formula)是一個用函數在某點的信息描述其附近取值的公式。其初衷是用多項式來近似表示函數在某點周圍的情況。

函數 處的基本形式如下

還有另外一種常見的寫法, ,將 處進行泰勒展開,得:

現在,我們去掉常量,然後重新認識一下我們新的目標函數

定義 是葉子 j 的實例集合。 將正則項帶入,展開目標函數:

看起來有點複雜,令: ,上式簡化爲:

上式中 是相互獨立的, 是平方項。對於一個確定的結構 ,我們可以計算最優的權重 :

帶入上式,計算得到的loss最優解

可以作爲一個得分函數(scoring function)來衡量一棵樹結構 的質量。

我們有了一個方法來衡量一棵樹有多好,現在來看XGBoost優化的第二個問題:如何選擇哪個特徵和特徵值進行分裂,使最終我們的損失函數最小?

XGBoost特徵選擇和切分點選擇指標定義爲:

具體如何分裂?

XGBoost每一步選能使分裂後增益最大的分裂點進行分裂。而分裂點的選取之前是枚舉所有分割點,這稱爲完全貪婪算法(exact greedy algorithm),在所有特徵上,枚舉所有可能的劃分。

  • 基於當前節點嘗試分裂決策樹,默認分數score=0,G和H爲當前需要分裂的節點的一階二階導數之和。
  • 對特徵序號 k=1,2...K:
  • 將樣本按特徵k從小到大排列,依次取出第i個樣本,依次計算當前樣本放入左子樹後,左右子樹一階和二階導數和:
  • 嘗試更新最大的分數:
  • 基於最大score對應的劃分特徵和特徵值分裂子樹。
  • 如果最大score爲0,則當前決策樹建立完畢,計算所有葉子區域的 , 得到弱學習器 ,更新強學習器 ,進入下一輪弱學習器迭代.如果最大score不是0,則繼續嘗試分裂決策樹。

當數據量十分龐大時,Exact Greedy 算法就會很慢,因此XGBoost引入了近似的算法,和Exact Greedy很類似,這裏就不再展開講了。


原理推導(精簡版)

下面是XGBoost原理推導的精簡版,方便同學們複習使用。

Xgboost@sklearn模型參數解析

XGBoost的實現有原生版本,同時也有Scikit-learn版本,兩者在使用上有一些微差異,這裏給出xgboost.sklearn 參數解釋。XGBoost使用key-value字典的方式存儲參數:

#部分重要參數
params = {
    'booster''gbtree',
    'objective''multi:softmax',  # 多分類的問題
    'num_class': 10,               # 類別數,與 multisoftmax 並用
    'gamma': 0.1,                  # 用於控制是否後剪枝的參數,越大越保守,一般0.1、0.2這樣子。
    'max_depth': 12,               # 構建樹的深度,越大越容易過擬合
    'lambda': 2,                   # 控制模型複雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。
    'subsample': 0.7,              # 隨機採樣訓練樣本
    'colsample_bytree': 0.7,       # 生成樹時進行的列採樣
    'min_child_weight': 3,
    'silent': 1,                   # 設置成1則沒有運行信息輸出,最好是設置爲0.
    'eta': 0.007,                  # 如同學習率
    'seed': 1000,
    'nthread': 4,                  # cpu 線程數
}
xgboost完整參數解析

篇幅原因,調參實例及XGBoost可視化且聽下回分解。
如有收穫,還請不吝給個在看、收藏、轉發

參考

https://www.cnblogs.com/pinard/p/10979808.html
https://www.biaodianfu.com/xgboost.html https://www.zybuluo.com/vivounicorn/note/446479 https://www.cnblogs.com/chenjieyouge/p/12026339.html

 
    
    
    
也可以加一下老胡的微信
圍觀朋友圈~~~


推薦閱讀

(點擊標題可跳轉閱讀)

麻省理工學院計算機課程【中文版】
【清華大學王東老師】現代機器學習技術導論.pdf
機器學習中令你事半功倍的pipeline處理機制
機器學習避坑指南:訓練集/測試集分佈一致性檢查
機器學習深度研究:特徵選擇中幾個重要的統計學概念

老鐵,三連支持一下,好嗎?↓↓↓

本文分享自微信公衆號 - 機器學習算法與Python實戰(tjxj666)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章