仍然記得15年前參加工做的第一天,剛完成研究生學業的我,加入了一家全球投資銀行擔任分析師。那天我不停地拉直領帶,努力回憶起學過的全部東西,懷疑本身是否足夠勝任工做。察覺到個人焦慮,老闆微笑着說:java
「別擔憂!你只須要知道迴歸模型就好了!」面試
我當時在想,「我知道這個!」。我知道迴歸模型、線性迴歸和邏輯迴歸。老闆的說法是對的,在任期內我僅僅創建了基於迴歸的統計模型。在那個時候,迴歸建模是預測分析無可爭議的女王。15年後,迴歸建模的時代已經結束。遲暮的女王已經退場,取而代之的是名字時髦、活力滿滿的新女王XGBoost(Exterme Gradient Boosting,極限梯度提高)。算法
XGBoost是基於決策樹的集成機器學習算法,使用了梯度提高框架。在涉及非結構化數據(圖像、文本等)的預測問題中,人工神經網絡每每優於全部其餘算法或框架。然而,當涉及到中小型結構化/表格數據時,基於決策樹的算法被認爲是目前同類中最好的。請參閱下表瞭解這些年來基於樹的算法的發展。編程
基於決策樹的XGBoost算法演化緩存
XGBoost算法是華盛頓大學的一個研究項目。陳天奇和Carlos Guestrin在2016年的SIGGDD大會上發的的論文,讓機器學習世界如火如荼。自引入以來,該算法不只贏得了衆多的Kaggle競賽,並且還被認爲是若干前沿行業應用的驅動力。所以,有一個強大的數據科學家社區爲XGBoost開源項目作出貢獻,GitHub上有大約350個貢獻者和~3600個提交者。該算法有如下特色:網絡
應用範圍普遍:可用於解決迴歸、分類、排名和用戶自定義預測問題。框架
可移植性:在Windows、Linux和os x上運行平穩。機器學習
語言:支持全部主流的編程語言,包括C++、Python、R、java、Scala和Julia。編程語言
決策樹,在其最簡單的形式,是易於可視化和至關可解釋的算法,但爲下一代基於樹的算法創建直覺可能有點棘手。下面是一個簡單的類比,能夠更好地理解基於樹的算法的發展。分佈式
照片來Unsplash的rawpixel
想象一下,你是一個招聘經理,面試幾位資歷優秀的應聘者。基於樹的算法進化的每一步均可以看做是面試過程的一個版本。
決策樹:每一個招聘經理都有一套標準,好比教育水平、工做年限、面試表現。決策樹相似於招聘經理根據本身的標準面試應聘者。
Bagging:如今想象一下,不是一個面試官,而是一個面試小組,每一個面試官都有投票權。Bagging聚合包括經過民主投票過程將全部面試官的意見結合起來,以最終作出決定。
隨機森林:這是一種基於Bagging的算法,有一個關鍵的區別,其中只有一個子集的特徵是隨機選擇的。換言之,每一個面試官只會對面試者進行一些隨機選擇的資格測試(例如,測試編程技能的技術面試和評估非技術技能的行爲面試)。
Boosting:這是一種替代方法,每一個面試官都會根據前一位面試官的反饋來改變評估標準。這經過部署一個更動態的評估過程來「提高Boosts」面試過程的效率。
梯度提高:經過梯度降低算法將偏差最小化的一種特例,例如,戰略諮詢公司利用案例面試來淘汰不合格的候選人。
XGBoost和Gradient Boosting Machines(GBMs)都是集成樹方法,它們採用梯度降低結構來提升弱學習者(CARTs)的學習能力。然而,XGBoost經過系統優化和算法加強改進了基本GBM框架。
XGBoost如何優化標準GBM算法
並行化:XGBoost使用並行化實現序列樹的構建過程。這是可能的,由於用於構建基本學習器的循環具備可互換性;外部循環枚舉樹的葉節點,第二個內部循環計算特徵。這是可能的,由於用於構建基本學習器的循環具備可互換性;外部循環枚舉樹的葉節點,第二個內部循環計算特徵。這種循環嵌套限制了並行化,由於沒有完成內部循環(對這兩個循環的計算要求更高),外部循環就沒法啓動。所以,爲了改進運行時,循環的順序是經過初始化來交換的,經過對全部實例的全局掃描和使用並行線程進行排序。此開關經過抵消計算中的任何並行化開銷來提升算法性能。
樹修剪:GBM框架中的樹分裂中止準則本質上是貪婪的,它依賴於分裂點的負損失準則。XGBoost使用指定的「max_depth」參數,而不是先使用條件,而後開始向後修剪樹。這種「深度優先」方法顯著提升了計算性能。
算法加強:
正則化:它經過L1脊線L2正則化來懲罰更復雜的模型,以防止過分擬合。
稀疏性意識:XGBoost經過根據訓練損失自動「學習」最佳缺失值,天然地容許輸入稀疏特徵,並更有效地處理數據中不一樣類型的稀疏模式。
加權分位數草圖:XGBoost採用分佈式加權分位數草圖算法,有效地找到加權數據集之間的最佳分割點。
咱們使用scikitlearn的「Make_nuclassification」數據包建立了一個隨機樣本,其中有100萬個數據點,有20個特徵(2個是信息性的,2個是冗餘的)。咱們測試了一些算法,如Logistic迴歸、隨機森林、標準梯度提高和XGBoost。
XGBoost與使用SKLearn的Make_Classification 數據集的其餘ML算法的比較
如上圖所示,與其餘算法相比,XGBoost模型具備最佳的預測性能和處理時間組合。其餘嚴格的基準研究也產生了相似的結果。難怪XGBoost在最近的數據科學競賽中被普遍使用。
「若有疑問,請使用XGBoost」——Owen Zhang
說到機器學習(甚至是生活),沒有免費的午飯。做爲數據科學家,咱們必須測試手頭數據的全部可能的算法,以肯定冠軍算法。此外,選擇正確的算法是不夠的。咱們還必須經過調整超參數來爲數據集選擇正確的算法配置。此外,在選擇獲勝算法時還有其餘一些考慮因素,例如計算複雜度、可解釋性和易於實現。這正是機器學習開始從科學走向藝術的起點,但老實說,這就是奇蹟發生的地方!
機器學習是一個很是活躍的研究領域,已經有幾種可行的XGBoost替代方案。微軟研究院最近發佈了LightGBM框架來加強梯度,顯示出巨大的潛力。Yandex Technology開發的CatBoost已經取得了使人印象深入的基準測試結果。在預測性能、靈活性、可解釋性和實用性方面,咱們有一個比XGBoost更好的模型框架是早晚的事。然而,直到有一個強大的挑戰者出現,XGBoost將繼續統治機器學習世界!
【責任編輯:龐桂玉 TEL:(010)68476606】