數據挖掘中的利器——XGBoost理論篇

2020-12-05 機器學習算法工程師

XGBoost是各種數據挖掘或機器學習算法類比賽中每個團隊都會使用且精度相對最好的算法之一(Deep Learning算法除外)。也就是說,對於剛轉向機器學習領域的同胞們,在掌握數據挖掘的基本常識概念之後,要想在比賽中有所收穫,掌握XGBoost算法也是當務之急。

1、XGBoost算法優點

XGBoost 是 Extreme Gradient Boosting的簡稱。它是Gradient Boosting Machine的一個C++實現.創建之初為受制於現有庫的計算速度和精度,XGBoost最大的特點,它能夠自動利用CPU的多線程進行並行,同時,在算法上加以改進提高了精度[1]。

傳統的GBDT(Gradient Boosted Decision Trees)模型,在1999年,由Jerome Friedman提出,最早Yahoo將GBDT模型應用於CTR預估。GBDT是一個加權回歸模型,通過Boosting迭代弱學習器,相對於LR的優勢是不需要做特徵的歸一化,可以自動進行特徵選擇,模型可解釋性較好,可以適應多種損失函數如SquareLoss,LogLoss等[2]。但作為非線性模型,其相對線性模型的缺點比較明顯,Boosting是串行的過程,不能並行化,計算複雜度較高,同時其不太適合高維稀疏特徵,通常採用稠密的數值特徵。

XGBoost不同於傳統的GBDT只利用了一階導數的信息,而XGBoost對損失函數做了二階泰勒展開,並在目標函數中加入了正則項,整體求最優解,用以權衡目標函數和模型的複雜程度,防止過擬合。

除理論與傳統GBDT存在差別外, XGBoost的設計理念主要有如下幾點優點:

速度快。讓一個程序在必要時佔領一臺機器,並且在所有迭代的時候一直跑到底,防止重新分配資源的開銷。機器內部採用單機多線程方式來並行加速,機器之間通信基於Rabit實現的All Reduce的同步接口。

可移植,少寫代碼。大多數分布式機器學習算法的結構都是分布數據,在每個子集上面算出一些局部的統計量,然後整合出全局的統計量,然後再分配給每個計算節點進行下一輪的迭代。根據算法本身的需求,抽象出合理的接口,如All Reduce,並通過通用的Rabit庫讓平臺實現接口的需求,最終使得各種比較有效的分布式機器學習抽象地實現在各個平臺上。

可容錯。Rabit版本的All Reduce有一個很好的性質,支持容錯,而傳統的MPI不支持。由於All Reduce中,每一個節點最後拿到相同的結果,這意味著可以讓一部分節點記住結果,當有節點掛掉重啟的時候,可以直接向還活著的節點索要結果。

2、XGBoost算法與目標函數

XGBoost算法是基於樹的Boosting算法,並在其優化目標函數中加了正則化項,其目標函數為

式中Lm表示第m次迭代中生成樹模型fm的葉子節點數,表示fm各個葉子節點的輸出值。和λ是正則化係數,從公式中能看出這兩個值控制著模型的複雜度和目標函數的輸出,當和λ都為零時,只含有損失函數部分,即生成樹的規模和葉子節點的輸出值不受限制。加了正則化項,使得算法會選擇簡單而性能較好的模型fm,公式中的正則化項只是抑制在迭代過程中弱學習器fm(X)過擬合,並不參與最終模型的集成。式中應至少滿足是二階連續可導的凸函數。

XGBoost算法跟Gradient Boosting算法一樣採用分步前向加性模型,區別在於,Gradient Boosting算法是學習一個弱學習器fm(X)來近似損失函數在點Pm-1=Fm-1(X)處的負梯度,而XGBoost算法是先求損失函數在該點的二階泰勒近似值,然後最小化該近似損失函數來訓練弱學習器fm(X),得到

式中

表示損失函數假設在點Pm-1(X)處的第i個分量Fm-1(xi)的一階偏導數,

為損失函數在點Pm-1(X)處的第i個分量Fm-1(xi)的二階偏導數,使用上式作為近似優化目標函數。對上式變形,得到

式中第一項在每次迭代過程中是常數,不會影響優化目標函數的結果。

3、具體代碼實例

扯了一大推理論,感覺還是來點乾貨靠譜(題外之話了,大家在應用每一個算法之前,最好理解算法的原理,這樣才能在使用算法過程中,調好算法的每一個參數)。

Python代碼:

參考文獻:

[1] Chen T, Guestrin C. Xgboost: A scalable tree boosting system[C]//Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016: 785-794.

[2] Friedman J H. Greedy function approximation: a gradient boosting machine[J]. Annals of statistics, 2001: 1189-1232.

相關焦點

  • XGboost算法在不同作業系統中安裝方法乾貨分享
    公眾號專注於人工智慧、大數據、社會熱點等相關領域,歡迎關注公眾號!安裝Xgboost方法最近小編想安裝一下xgboost軟體包,用pip install xgboost 安裝有問題,今天將對主流作業系統下的安裝方法進行了匯總,用到的時候拿來即用,省事省力,內容包括三大主流作業系統的,其他系統的沒有環境,暫時不列舉。
  • 資料| 陳天奇介紹Xgboost原理的PPT
    【 圖片來源:https://xgboost.apachecn.org/  所有者:https://xgboost.apachecn.org/ 】內容簡介陳天奇介紹Xgboost原理的PPT,用於學習XGBoost提供並行樹提升(也稱為GBDT,GBM),可以快速準確地解決許多數據科學問題。相同的代碼在主要的分布式環境(Hadoop,SGE,MPI)上運行,並且可以解決數十億個示例之外的問題。
  • 中信建投證券:xgboost中證500指數增強7月持倉組合發布
    xgboost模型是一種強學習模型,其是由眾多弱學習模型集成,其採用弱學習模型為CART,即分類與回歸樹。該模型重在擬合特徵和標籤間的非線性關係。組成該模型的眾多弱學習器之間的關係是補充彌補的關係,弱學習器的訓練有先後,每個新的弱學習器的學習目標都是之前已訓練好的弱學習器的殘差。
  • 大戰三回合:XGBoost、LightGBM和Catboost一決高低
    但在大訓練樣本和高維度特徵的數據環境下,GBDT 算法的性能以及準確性卻面臨了極大的挑戰,隨後,2017 年 LightGBM 應勢而生,由微軟開源的一個機器學習框架;同年,俄羅斯的搜索巨頭 Yandex 開源 Catboost 框架。
  • XGBoost 重要關鍵參數及調優步驟
    本篇對XGBoost主要參數進行解釋,方括號內是對應scikit-learn中XGBoost算法模塊的叫法。提升參數雖然有兩種類型的booster,但是我們這裡只介紹tree。因為tree的性能比線性回歸好得多,因此我們很少用線性回歸。
  • 研究利器 OncoLnc:TGCA數據挖掘工具
    研究利器| OncoLnc:TGCA數據挖掘工具
  • AI時代,數據挖掘過時了嗎?—企業數據挖掘成功之道(理論篇)
    數據挖掘(Data Mining)隸屬於知識發現(KDD)的範疇,是(劃重點)基於人工智慧、機器學習、模式識別、統計學和資料庫等交叉方法,在數據中特別是大數據及海量數據中發現規律的過程,是從一個數據中提取、融合、處理信息,並將其轉換成可理解的結構數據、可視化的分析圖表、可解釋的規律結論,以進一步響應業務分析的需求。
  • 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    從那時開始,我就對這些算法的內在工作原理非常好奇,包括調參及其優劣勢,所以有了這篇文章。儘管最近幾年神經網絡復興,並變得流行起來,但我還是更加關注 boosting 算法,因為在訓練樣本量有限、所需訓練時間較短、缺乏調參知識的場景中,它們依然擁有絕對優勢。
  • XGBoost缺失值引發的問題及其深度分析|CSDN博文精選
    而且平臺上運行的版本,和該同學本地使用的版本,都來源於Dmlc的官方版本,JNI底層調用的應該是同一份代碼,理論上,結果應該是完全一致的,但實際中卻不同。因此,對於0值非常多的一組數據,SparseVector能大幅節省存儲空間。SparseVector存儲示例見下圖:如上圖所示,SparseVector中不保存數組中值為0的部分,僅僅記錄非0值。因此對於值為0的位置其實不佔用存儲空間。
  • 業界| 深度學習與XGBoost在小數據集上的測評,你怎麼看?(附源碼)
    在本文中,Max Brggen 在多個小數據集對神經網絡和 XGBoost 進行了對比,並表明 ANN 在小數據集可以得到和 XGBoost 相媲美的結果。下面讓我們在基準數據集上比較這些算法。/iris.csv」該數據集只有三個類別共計 150 個數據點,它是一個很小的數據集我們可以從 Pandas 數據框架中創建特徵矩陣 X 和目標向量 y。
  • 什麼叫數據挖掘_數據挖掘技術解析
    數據挖掘(data mining)是指從大量的資料中自動搜索隱藏於其中的有著特殊關聯性的信息的過程。在全世界的計算機存儲中,存在未使用的海量數據並且它們還在快速增長,這些數據就像待挖掘的金礦,而進行數據分析的科學家、工程師、分析員的數量變化一直相對較小,這種差距稱為數據挖掘產生的主要原因。
  • 數據挖掘常用的算法
    很多人對大數據的基本概念和特點已經有所了解,那麼我們僅僅將大數據進行獲取、存儲、檢索和共享是不夠的,怎麼樣才能在大數據中找出未知的且有價值的信息和知識呢?  知識發現(KDD)就是從大數據中識別出有效的、新穎的、潛在有用的,以及最終可理解的模式的過程。  數據挖掘是大數據知識發現(KDD)中不可缺少一部分,是大數據理論和應用中非常重要的一部分。
  • 機器學習到底需要多少數據?可能並不是越多越好
    機器學習中最值得問的一個問題是,到底需要多少數據才可以得到一個較好的模型?從理論角度,有Probably approximately correct (PAC) learning theory來描述在何種情況下,可以得到一個近似正確的模型。但從實用角度看,PAC的使用範圍還是比較局限的。
  • 大數據中數據挖掘的基本步驟
    ,數據挖掘過程定義問題、建立數據挖掘庫、分析數據、準備數據、建立模型、評價模型和實施。挖掘出潛在的模式,幫助決策者調整市場策略,減少風險,作出正確的決策。   數據挖掘是什麼   數據挖掘指從資料庫的大量數據中揭示出隱含的、先前未知的並有潛在價值的信息的非平凡過程。
  • 深度解析數據挖掘在推薦系統中的應用
    實際上,在構建推薦系統的過程中會用到大量的數據挖掘算法。首先,來說下數據挖掘中的聚類分析。推薦系統裡用得最多的協同過濾算法,實際上就是數據挖掘裡的聚類算法。協同過濾的原理分為兩種,一種是基於用戶的協同過濾,就是找到與用戶A興趣相識的用戶B,然後將用戶B看過的物品推薦給用戶A。
  • 【乾貨】數據挖掘中算法學習的2條進擊路線
    這說明你尚不具備深入開展數據挖掘算法學習的能力。你會發現到處都是門檻,很難繼續進行下去。基於普通最小二乘的線性回歸是統計中一種有著非常悠久歷史的方法,它的使用甚至可以追溯到高斯的時代。但是它對數據有諸多要求,例如特徵之間不能有多重共線性。嶺回歸和LASSO是對這些問題的修正。當沿著第一條路線學完的時候,其實你已經攻克機器學習的半壁江山了!
  • 數據挖掘與統計分析的區別
    如下是一些例子:.概率理論.實分析.測度論.漸近理論.決策理論.馬耳可夫鏈.遍歷理論統計領域好象被定義成一族能提出如上或相關工具的問題。當然這些工具過去和將來都會很有用。那些忽略了統計的人將受到懲罰,他們將在實際中自己重新發現該統計方法。」有人認為在當前數據(及其相關應用)以指數方式增長,而統計學家的數量顯然趕不上這種增長的情況下,我們統計學應該將精力集中於信息科學中我們作得最好的部分,也就是基於數學的概率推斷。這是一種高度保守的觀點,當然它也有可能是最好的一種戰略。