小巧玲瓏:機器學習屆快刀XGBoost的介紹和使用

歡迎你們前往騰訊雲技術社區,獲取更多騰訊海量技術實踐乾貨哦~python

做者:張萌 算法

序言

XGBoost效率很高,在Kaggle等諸多比賽中使用普遍,而且取得了很多好成績。爲了讓公司的算法工程師,能夠更加方便的使用XGBoost,咱們將XGBoost更好地與公司已有的存儲資源和計算平臺進行集成,將數據預處理、模型訓練、模型預測、模型評估及可視化、模型收藏及分享等功能,在Tesla平臺中造成閉環,同時,數據的流轉實現了與TDW徹底打通,讓整個機器學習的流程一體化。編程

XGBoost介紹

XGBoost的全稱爲eXtreme Gradient Boosting,是GBDT的一種高效實現,XGBoost中的基學習器除了能夠是CART(gbtree)也能夠是線性分類器(gblinear)。併發

什麼是GBDT?

  • GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹算法,該算法由多棵決策樹組成,全部樹的結論累加起來作最終答案。它在被提出之初就和SVM一塊兒被認爲是泛化能力(generalization)較強的算法。GBDT的核心在於,每一棵樹學的是以前全部樹結論和的殘差,這個殘差就是一個加預測值後能得真實值的累加量。與隨機森林不一樣,隨機森林採用多數投票輸出結果;而GBDT則是將全部結果累加起來,或者加權累加起來。

XGBoost對GBDT的改進

1 . 避免過擬合機器學習

目標函數以外加上了正則化項總體求最優解,用以權衡目標函數的降低和模型的複雜程度,避免過擬合。基學習爲CART時,正則化項與樹的葉子節點的數量T和葉子節點的值有關。maven

2 . 二階的泰勒展開,精度更高函數

不一樣於傳統的GBDT只利用了一階的導數信息的方式,XGBoost對損失函數作了二階的泰勒展開,精度更高。工具

第t次的損失函數:oop

對上式作二階泰勒展開( g爲一階導數,h爲二階導數):性能

3 . 樹節點分裂優化

選擇候選分割點針對GBDT進行了多個優化。正常的樹節點分裂時公式以下:

XGBoost樹節點分裂時,雖然也是經過計算分裂後的某種值減去分裂前的某種值,從而獲得增益。可是相比GBDT,它作了以下改進:

  • 經過添加閾值gamma進行了剪枝來限制樹的生成
  • 經過添加係數lambda對葉子節點的值作了平滑,防止過擬合。
  • 在尋找最佳分割點時,考慮傳統的枚舉每一個特徵的全部可能分割點的貪心法效率過低,XGBoost實現了一種近似的算法,即:根據百分位法列舉幾個可能成爲分割點的候選者,而後從候選者中根據上面求分割點的公式計算找出最佳的分割點。
  • 特徵列排序後以塊的形式存儲在內存中,在迭代中能夠重複使用;雖然boosting算法迭代必須串行,可是在處理每一個特徵列時能夠作到並行。

總體上,經過上述的3個優化,加上其易用性,不太須要編程,XGBoost目前是GBDT體系中最受歡迎的工具。可是值得留意的是,當數據量很大,尤爲是維度很高的狀況下,XGBoost的性能會降低較快,這時推動你們能夠試試騰訊本身的Angel,其GBDT比XGBoost性能更好噢

TDW體系中的XGBoost介紹

XGBoost在TDW體系中以兩種形式存在

  • 提供出了拖拽式的組件,來簡化用戶使用成本
  • 提供出了maven依賴,來讓用戶享受Spark Pipeline的流暢

1. Tesla平臺上的3個組件:

  • XGBoost-spark-ppc組件(基於社區版0.7,以Spark做業形式運行在PowerPC機型的集羣上)
  • XGBoost-spark-x86組件(基於社區版0.7,以Spark做業形式運行在x86機型的集羣上)
  • XGBoost-yarn組件(基於社區版0.4,以Yarn做業形式運行在x86機型的集羣上)

目前來看,XGBoost的ppc版本,性能比x86的好,建議你們優先選擇。

2. 公司Maven庫中的3個依賴:

  • XGBoost4j-ppc(封裝社區版0.7的API,在PowerPC機型上進行的編譯)
  • XGBoost4j-x86(封裝社區版0.7的API,在x86機型上進行的編譯)
  • XGBoost4j-toolkit(封裝HDFS IO、TDW IO、Model IO等功能)

Tesla中的XGBoost-on-spark組件介紹

Tesla中XGBoost-on-spark組件根據集羣的機型區分紅:XGBoost-spark-ppc組件和XGBoost-spark-x86組件。將之前的XGBoost-yarn組件進行了升級,體如今了:

數據源之間的打通、做業調試更友好、IO方式更豐富、數據處理的上下游延伸更廣、model支持在線服務等方面。

  1. 數據源之間的打通

    • 消除了不一樣HDFS集羣上的權限問題
    • 與TDW打通,數據流轉更順暢,開發成本更低
      • 用戶能夠再也不編寫程序生成LibSVM格式的數據文件,而是經過Hive或者Spark SQL生成TDW特徵表,經過選擇TDW特徵表的某些列(selected_cols=1-2,4,8-10),由XGBoost-on-spark組件後臺生成libsvm類型的輸入
      • 能夠針對TDW分區表,藉助Tesla做業定時調度機制,能夠進行XGBoost做業的例行化調度運行
  2. 做業調試更友好

    • 以Spark做業的形式,而非直接的Yarn做業的形式運行,用戶對做業的運行狀況更清楚
      • 能夠查看做業的進度
      • 能夠查看各節點上的日誌信息
  3. IO方式更豐富

    • 輸入的數據集來源,能夠爲以前的HDFS上LibSVM格式的文件形式。也能夠爲一張TDW表,用戶經過選擇TDW表中的某些列,由XGBoost-on-spark組件在後臺生成LibSVM格式的輸入。
    • 訓練階段增長了特徵重要度(weight、gain、cover)的輸出、以及3種類型model的輸出:文本格式(用戶能夠直接查看)、LocalFile的二進制格式(用戶能夠下載到本地,利用python加載後在線預測)、HadoopFile的二進制格式(用戶能夠在Tesla環境中,利用Spark加載後離線批量預測)
    • 模型輸出的3種格式舉例


4 . 數據處理的上下游延伸更廣

與Tesla平臺深度整合

  • 能夠拖拽Tesla的組件:數據切分、模型評估,實現數據處理的上下游功能
  • 能夠利用Tesla的功能:參數替換、併發設置,進行批量調參

5 . model支持在線服務

  • 能夠利用Tesla的模型服務,進行模型導出、模型部署、在線預測

總結

XGBoost是機器學習的利器,雖然小巧,可是功能強大,以其被實戰檢驗過的高效,吸引了不少使用者。咱們針對用戶痛點進行了諸多改進,實現了用戶在Tesla平臺中更加方便的使用,大大減小了用戶的開發成本,同時,咱們也開放出了XGBoost API,讓邏輯複雜的業務能夠在自身系統中嵌入xgBoost,更加直接的對接TDW系統。後續有進一步的需求,歡迎聯繫Tesla團隊,咱們將提供更好的機器學習和數據服務。

 

相關閱讀

當 AI 碰見體育

騰訊 AI Lab 副主任俞棟:過去兩年基於深度學習的聲學模型進展

基於騰訊開源 Angel 的 LDA* 入選國際頂級學術會議 VLDB


 此文已由做者受權騰訊雲技術社區發佈,轉載請註明文章出處

原文連接:https://cloud.tencent.com/community/article/794649

相關文章
相關標籤/搜索