XGBoost之切分點算法

歡迎關注天善智能,我們是專注於商業智能BI,人工智能AI,大數據分析與挖掘領域的垂直社區,學習,問答、求職一站式搞定!

對商業智能BI、大數據分析挖掘、機器學習,python,R等數據領域感興趣的同學加微信:tstoutiao,邀請你進入數據愛好者交流羣,數據愛好者們都在這兒。

作者:張磊 從事AI醫療算法相關工作

個人微信公衆號:

機器學習算法那些事(微信ID:zl13751026985)


前言

上文介紹了XGBoost的算法原理並引出了衡量樹結構好壞的打分函數(目標函數),根據特徵切分點前後的打分函數選擇最佳切分點,但並未對節點的切分算法作詳細的介紹。本文詳細的介紹了XGBoost的切分點算法,內容參考陳天奇博士《XGBoost :A scalable Tree Boosting System》,後臺回覆XGBoost,獲取論文下載鏈接。

目錄


  • 並行原理

  • 切分點算法之貪婪算法

  • 切分點算法之分位點算法

  • 切分點算法之權重分位點算法

  • 稀疏數據的切分算法

  • 總結


  • 1. 並行原理

    XGBoost是串行生成CART樹,但是XGBoost在處理特徵時可以做到並行處理,XGBoost並行原理體現在最優切分點的選擇,假設樣本數據共M個特徵,對於某一輪CART樹的構建過程中,選擇最佳切分點算法如下圖:


    1. 紅色框表示根據每個特徵大小對訓練數據進行排序,保存爲block結構,block個數與特徵數量相等。                                                             

    2. 綠色寬表示對每個block結構選擇最佳特徵切分點 ,節點切分標準是目標函數下降的程度,

    目標函數含義可參考上文

    3. 黑色框表示比較每個block結構的最佳特徵切分點的目標函數下降的增益,選擇最佳切分點。

    2. 切分點算法之貪婪算法

    每一個block結構的切分點算法思路是相同的,因此,我重點介紹某一塊block結構的切分點算法。

    XGBoost分位點算法:根據特徵對樣本數據進行排序,然後特徵從小到大進行切分,比較每次切分後的目標函數大小,選擇下降最大的節點作爲該特徵的最優切分點。最後比較不同block塊結構最優切分點的目標函數下降值,選擇下降最大的特徵作爲最優切分點。


    流程圖如下:


    【例】下表表示樣本的某一列特徵數值

    根據特徵大小對樣本重新排序:

    貪婪算法切分節點:

    紅箭頭表示每一次的切分節點,選擇目標函數下降最大的點作爲切分節點。

    3. 切分點算法之分位點算法

    若特徵是連續值,按照上述的貪婪算法,運算量極大 。當樣本量足夠大的時候,使用特徵分位點來切分特徵。流程圖如下:

    【例】下表表示樣本的某一列特徵數值,用三分位作爲切分節點 。

    根據特徵大小進行樣本排序:

    用特徵的三分位點作切分節點:

    紅箭頭表示每一次的切分節點,選擇目標函數下降最大的點作爲切分節點。

    4. 切分點算法之權重分位點算法

    上節假設樣本權重相等,根據樣本的分位點來均分損失函數存在偏差,本節用樣本權重來均分損失函數。

    損失函數如下:

    對其變形得到:

    xi損失函數可以看做是以以−gi/hi作爲label的均方誤差,乘以大小hi的權重,換句話說,xi對loss的貢獻權重爲hi ,構建樣本權重的分位點等於誤差的均分。

    上節假設樣本權重相等,特徵值的分位點作爲切分點,本節假設樣本權重是hi,構建樣本權重的均分點步驟:

    (1)根據特徵大小對樣本進行排序

    (2)定義排序函數:

    其中x,z表示特徵

    (3)設置排序函數的分位點爲切分點


    【例】如下圖

    特徵與對應的排序函數值的關係,如下表:

    紅色箭頭表示以三分位點作爲切分點。

    最後,選擇最優切分點。

    5. 稀疏數據的切分算法

    稀疏數據在實際項目是非常常見,造成稀疏數據的原因主要有:1. 數據缺失;2. 統計上的 0;3. one-hot編碼的特徵表示。

    稀疏數據的切分點算法:

    當出現特徵值缺失時,包含缺失特徵值的樣本被映射到默認的方向分支,然後計算該節點的最優切分點,最優切分點對應的默認切分方向就是特徵值缺失時默認的方向。

    6. 總結

    本文內容是作者對陳天奇博士論文《XGBoos:A Scalable Tree Boosting System》的理解,若有不同的想法,歡迎交流。

    參考

    陳天奇《XGBoos:A Scalable Tree Boosting System》

    推薦閱讀:

  • XGBoost算法原理小結

  • scikit-learn K近鄰法類庫使用小結

  • 從0開始如何用一個月殺進機器學習比賽Top25%

  • 2018年終精心整理|人工智能愛好者社區歷史文章合集(作者篇)

  • 2018年終精心整理 | 人工智能愛好者社區歷史文章合集(類型篇)

  • 公衆號後臺回覆關鍵詞學習

    回覆 免費                獲取免費課程

    回覆 直播                獲取系列直播課

    回覆 Python           1小時破冰入門Python

    回覆 人工智能         從零入門人工智能

    回覆 深度學習         手把手教你用Python深度學習

    回覆 機器學習         小白學數據挖掘與機器學習

    回覆 貝葉斯算法      貝葉斯與新聞分類實戰

    回覆 數據分析師      數據分析師八大能力培養

    回覆 自然語言處理  自然語言處理之AI深度學習

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