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

  • 2020 年 8 月 13 日
  • AI

字幕組雙語原文:機器學習最優算法:XGBoost

英語原文:XGBoost Algorithm: Long May She Reign!

翻譯:雷鋒字幕組(yhfwww

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

「別擔心!你只需要知道回歸模型就行了!」

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

什麼是XGBoost?

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

XGBoost算法是華盛頓大學的一個研究項目。陳天奇和Carlos Guestrin在2016年的SIGGDD大會上發D的論文,讓機器學習世界如火如荼。自引入以來,該算法不僅贏得了眾多的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的直覺認識?

決策樹,在其最簡單的形式,是易於可視化和相當可解釋的算法,但為下一代基於樹的算法建立直覺可能有點棘手。下面是一個簡單的類比,可以更好地理解基於樹的算法的發展。  

照片來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如何優化標準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與使用SKLearn的Make_Classification 數據集的其他ML算法的比較

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

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

所以我們應該一直使用XGBoost嗎?

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

未來會怎樣?

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

【封面圖片來源:網站名Unsplash,所有者: Jared Subia】


雷鋒字幕組是由AI愛好者組成的志願者翻譯團隊;團隊成員有大數據專家、算法工程師、圖像處理工程師、產品經理、產品運營、IT諮詢人、在校師生;志願者們來自IBM、AVL、Adobe、阿里、百度等知名企業,北大、清華、港大、中科院、南卡羅萊納大學、早稻田大學等海內外高校研究所。

了解字幕組請聯繫微信:tlacttlact

轉載請聯繫字幕組微信並註明出處:雷鋒字幕組

雷鋒網雷鋒網