機器學習算法的新女王——XGBoost

仍然記得15年前參加工做的第一天,剛完成研究生學業的我,加入了一家全球投資銀行擔任分析師。那天我不停地拉直領帶,努力回憶起學過的全部東西,懷疑本身是否足夠勝任工做。察覺到個人焦慮,老闆微笑着說:java

「別擔憂!你只須要知道迴歸模型就好了!」面試

我當時在想,「我知道這個!」。我知道迴歸模型、線性迴歸和邏輯迴歸。老闆的說法是對的,在任期內我僅僅創建了基於迴歸的統計模型。在那個時候,迴歸建模是預測分析無可爭議的女王。15年後,迴歸建模的時代已經結束。遲暮的女王已經退場,取而代之的是名字時髦、活力滿滿的新女王XGBoost(Exterme Gradient Boosting,極限梯度提高)。算法

什麼是XGBoost?

XGBoost是基於決策樹的集成機器學習算法,使用了梯度提高框架。在涉及非結構化數據(圖像、文本等)的預測問題中,人工神經網絡每每優於全部其餘算法或框架。然而,當涉及到中小型結構化/表格數據時,基於決策樹的算法被認爲是目前同類中最好的。請參閱下表瞭解這些年來基於樹的算法的發展。編程

機器學習算法的新女王——XGBoost

基於決策樹的XGBoost算法演化緩存

XGBoost算法是華盛頓大學的一個研究項目。陳天奇和Carlos Guestrin在2016年的SIGGDD大會上發的的論文,讓機器學習世界如火如荼。自引入以來,該算法不只贏得了衆多的Kaggle競賽,並且還被認爲是若干前沿行業應用的驅動力。所以,有一個強大的數據科學家社區爲XGBoost開源項目作出貢獻,GitHub上有大約350個貢獻者和~3600個提交者。該算法有如下特色:網絡

  1. 應用範圍普遍:可用於解決迴歸、分類、排名和用戶自定義預測問題。框架

  2. 可移植性:在Windows、Linux和os x上運行平穩。機器學習

  3. 語言:支持全部主流的編程語言,包括C++、Python、R、java、Scala和Julia。編程語言

  4. 雲集成:支持AWS、Azure和Yarn集羣,與Flink、Spark和其餘生態系統配合良好。

如何創建對XGBoost的直覺認識?

決策樹,在其最簡單的形式,是易於可視化和至關可解釋的算法,但爲下一代基於樹的算法創建直覺可能有點棘手。下面是一個簡單的類比,能夠更好地理解基於樹的算法的發展。分佈式

機器學習算法的新女王——XGBoost

照片來Unsplash的rawpixel

想象一下,你是一個招聘經理,面試幾位資歷優秀的應聘者。基於樹的算法進化的每一步均可以看做是面試過程的一個版本。

  1. 決策樹:每一個招聘經理都有一套標準,好比教育水平、工做年限、面試表現。決策樹相似於招聘經理根據本身的標準面試應聘者。

  2. Bagging:如今想象一下,不是一個面試官,而是一個面試小組,每一個面試官都有投票權。Bagging聚合包括經過民主投票過程將全部面試官的意見結合起來,以最終作出決定。

  3. 隨機森林:這是一種基於Bagging的算法,有一個關鍵的區別,其中只有一個子集的特徵是隨機選擇的。換言之,每一個面試官只會對面試者進行一些隨機選擇的資格測試(例如,測試編程技能的技術面試和評估非技術技能的行爲面試)。

  4. Boosting:這是一種替代方法,每一個面試官都會根據前一位面試官的反饋來改變評估標準。這經過部署一個更動態的評估過程來「提高Boosts」面試過程的效率。

  5. 梯度提高:經過梯度降低算法將偏差最小化的一種特例,例如,戰略諮詢公司利用案例面試來淘汰不合格的候選人。

  6. XGBoost:能夠把XGBoost看做是對「steroids」的梯度加強(它被稱爲「極致梯度加強」是有緣由的!)。它是軟硬件優化技術的完美結合,能夠在最短的時間內使用較少的計算資源得到優異的結果。

爲何XGBoost表現如此出色?

XGBoost和Gradient Boosting Machines(GBMs)都是集成樹方法,它們採用梯度降低結構來提升弱學習者(CARTs)的學習能力。然而,XGBoost經過系統優化和算法加強改進了基本GBM框架。

機器學習算法的新女王——XGBoost

XGBoost如何優化標準GBM算法

  1. 並行化:XGBoost使用並行化實現序列樹的構建過程。這是可能的,由於用於構建基本學習器的循環具備可互換性;外部循環枚舉樹的葉節點,第二個內部循環計算特徵。這是可能的,由於用於構建基本學習器的循環具備可互換性;外部循環枚舉樹的葉節點,第二個內部循環計算特徵。這種循環嵌套限制了並行化,由於沒有完成內部循環(對這兩個循環的計算要求更高),外部循環就沒法啓動。所以,爲了改進運行時,循環的順序是經過初始化來交換的,經過對全部實例的全局掃描和使用並行線程進行排序。此開關經過抵消計算中的任何並行化開銷來提升算法性能。

  2. 樹修剪:GBM框架中的樹分裂中止準則本質上是貪婪的,它依賴於分裂點的負損失準則。XGBoost使用指定的「max_depth」參數,而不是先使用條件,而後開始向後修剪樹。這種「深度優先」方法顯著提升了計算性能。

  3. 硬件優化:此算法旨在有效利用硬件資源。這是經過緩存感知來實現的,經過在每一個線程中分配內部緩衝區來存儲梯度統計信息。進一步的加強,如「內核外」計算優化可用磁盤空間,同時處理不適合內存的大數據幀。

算法加強:

  1. 正則化:它經過L1脊線L2正則化來懲罰更復雜的模型,以防止過分擬合。

  2. 稀疏性意識:XGBoost經過根據訓練損失自動「學習」最佳缺失值,天然地容許輸入稀疏特徵,並更有效地處理數據中不一樣類型的稀疏模式。

  3. 加權分位數草圖:XGBoost採用分佈式加權分位數草圖算法,有效地找到加權數據集之間的最佳分割點。

  4. 交叉驗證:該算法在每次迭代中都帶有內置的交叉驗證方法,不須要顯式地對該搜索進行編程,也沒必要指定一次運行中所需的確切的提高迭代次數。

證據在哪裏?

咱們使用scikitlearn的「Make_nuclassification」數據包建立了一個隨機樣本,其中有100萬個數據點,有20個特徵(2個是信息性的,2個是冗餘的)。咱們測試了一些算法,如Logistic迴歸、隨機森林、標準梯度提高和XGBoost。

機器學習算法的新女王——XGBoost

XGBoost與使用SKLearn的Make_Classification 數據集的其餘ML算法的比較

如上圖所示,與其餘算法相比,XGBoost模型具備最佳的預測性能和處理時間組合。其餘嚴格的基準研究也產生了相似的結果。難怪XGBoost在最近的數據科學競賽中被普遍使用。

「若有疑問,請使用XGBoost」——Owen Zhang

因此咱們應該一直使用XGBoost嗎?

說到機器學習(甚至是生活),沒有免費的午飯。做爲數據科學家,咱們必須測試手頭數據的全部可能的算法,以肯定冠軍算法。此外,選擇正確的算法是不夠的。咱們還必須經過調整超參數來爲數據集選擇正確的算法配置。此外,在選擇獲勝算法時還有其餘一些考慮因素,例如計算複雜度、可解釋性和易於實現。這正是機器學習開始從科學走向藝術的起點,但老實說,這就是奇蹟發生的地方!

將來會怎樣?

機器學習是一個很是活躍的研究領域,已經有幾種可行的XGBoost替代方案。微軟研究院最近發佈了LightGBM框架來加強梯度,顯示出巨大的潛力。Yandex Technology開發的CatBoost已經取得了使人印象深入的基準測試結果。在預測性能、靈活性、可解釋性和實用性方面,咱們有一個比XGBoost更好的模型框架是早晚的事。然而,直到有一個強大的挑戰者出現,XGBoost將繼續統治機器學習世界!

【責任編輯:龐桂玉 TEL:(010)68476606】

相關文章
相關標籤/搜索