腾讯阿里都在用!机器学习最热研究方向入门,附学习路线图
導讀:集成學習是目前機器學習領域最熱門的研究方向之一,近年來許多機器學習競賽的冠軍均使用了集成學習。
本文介紹了集成學習中比較具有代表性的方法,如Boosting、Bagging等。而XGBoost是集成學習中的佼佼者,目前,一些主流的互聯網公司如騰訊、阿里巴巴等都已將XGBoost應用到其業務中。本文對XGBoost的歷史演化、應用場景及其優良特性進行了闡述,為入門XGBoost并進一步學習打下基礎。
作者:何龍
來源:大數據DT(ID:hzdashuju)
01 集成學習
集成學習的基本思想是把多個學習器通過一定方法進行組合,以達到最終效果的提升。雖然每個學習器對全局數據的預測精度不高,但在某一方面的預測精度可能比較高,俗話說“三個臭皮匠頂個諸葛亮”,將多個學習器進行組合,通過優勢互補即可達到強學習器的效果。
集成學習最早來自于Valiant提出的 PAC(Probably Approximately Correct)學習模型,該模型首次定義了弱學習和強學習的概念:識別準確率僅比隨機猜測高一些的學習算法為弱學習算法;識別準確率很高并能在多項式時間內完成的學習算法稱為強學習算法。
該模型提出給定任意的弱學習算法,能否將其提升為強學習算法的問題。1990年,Schapire對其進行了肯定的證明。
這樣一來,我們只需要先找到一個弱學習算法,再將其提升為強學習算法,而不用一開始就找強學習算法,因為強學習算法比弱學習算法更難找到。目前集成學習中最具代表性的方法是:Boosting、Bagging和Stacking。
1. Boosting
簡單來講,Boosting會訓練一系列的弱學習器,并將所有學習器的預測結果組合起來作為最終預測結果,在學習過程中,后期的學習器更關注先前學習器學習中的錯誤。
1995年,Freund等人提出了AdaBoost,成為了Boosting代表性的算法。AdaBoost繼承了Boosting的思想,并為每個弱學習器賦予不同的權值,將所有弱學習器的權重和作為預測的結果,達到強學習器的效果。
Gradient Boosting是Boosting思想的另外一種實現方法,由Friedman于1999年提出。與AdaBoost類似,Gradient Boosting也是將弱學習器通過一定方法的融合,提升為強學習器。
與AdaBoost不同的是,它將損失函數梯度下降的方向作為優化的目標,新的學習器建立在之前學習器損失函數梯度下降的方向,代表算法有GBDT、XGBoost(XGBoost會在下文詳細介紹)等。
一般認為,Boosting可以有效提高模型的準確性,但各個學習器之間只能串行生成,時間開銷較大。
2. Bagging
Bagging(Bootstrap Aggregating)對數據集進行有放回采樣,得到多個數據集的隨機采樣子集,用這些隨機子集分別對多個學習器進行訓練(對于分類任務,采用簡單投票法;對于回歸任務采用簡單平均法),從而得到最終預測結果。
隨機森林是Bagging最具代表性的應用,將Bagging的思想應用于決策樹,并進行了一定的擴展。一般情況下,Bagging模型的精度要比Boosting低,但其各學習器可并行進行訓練,節省大量時間開銷。
3. Stacking
Stacking的思想是通過訓練集訓練好所有的基模型,然后用基模型的預測結果生成一個新的數據,作為組合器模型的輸入,用以訓練組合器模型,最終得到預測結果。組合器模型通常采用邏輯回歸。
下面我們來具體了解下XGBoost。
02 XGBoost
XGBoost(Extreme Gradient Boosting)由華盛頓大學的陳天奇博士提出,最開始作為分布式(深度)機器學習研究社區(DMLC)小組的研究項目之一。后因在希格斯(Higgs)機器學習挑戰賽中大放異彩,被業界所熟知,在數據科學應用中廣泛應用。
目前,一些主流的互聯網公司如騰訊、阿里巴巴等都已將XGBoost應用到其業務中,在各種數據科學競賽中,XGBoost也成為競賽者們奪冠的利器。
XGBoost在推薦、搜索排序、用戶行為預測、點擊率預測、產品分類等問題上取得了良好的效果。
雖然這些年神經網絡(尤其是深度神經網絡)變得越來越流行,但XGBoost仍舊在訓練樣本有限、訓練時間短、調參知識缺乏的場景下具有獨特的優勢。相比深度神經網絡,XGBoost能夠更好地處理表格數據,并具有更強的可解釋性,另外具有易于調參、輸入數據不變性等優勢。
XGBoost是Gradient Boosting的實現,相比其他實現方法,XGBoost做了很多優化,在模型訓練速度和精度上都有明顯提升,其優良特性如下。
將正則項加入目標函數中,控制模型的復雜度,防止過擬合。
對目標函數進行二階泰勒展開,同時用到了一階導數和二階導數。
實現了可并行的近似直方圖算法。
實現了縮減和列采樣(借鑒了GBDT和隨機森林)。
實現了快速直方圖算法,引入了基于loss-guide的樹構建方法(借鑒了LightGBM)。
實現了求解帶權值的分位數近似算法(weighted quantile sketch)。
可根據樣本自動學習缺失值的分裂方向,進行缺失值處理。
數據預先排序,并以塊(block)的形式保存,有利于并行計算。
采用緩存感知訪問、外存塊計算等方式提高數據訪問和計算效率。
基于Rabit實現分布式計算,并集成于主流大數據平臺中。
除CART作為基分類器外,XGBoost還支持線性分類器及LambdaMART排序模型等算法。
實現了DART,引入Dropout技術。
目前已經有越來越多的開發人員為XGBoost開源社區做出了貢獻。XGBoost實現了多種語言的包,如Python、Scala、Java等。Python用戶可將XGBoost與scikit-learn集成,實現更為高效的機器學習應用。另外,XGBoost集成到了Spark、Flink等主流大數據平臺中。
附上XGBoost的學習路徑:
03 XGBoost運行環境搭建
XGBoost安裝分為兩種方式,一種是直接通過pip安裝(適用于Ptyhon),另一種是直接編譯源碼安裝。
1. 通過pip安裝
通過pip安裝Python包既簡單又方便。如果讀者準備在Python環境下使用XGBoost,即可以采用此方法。只需執行如下命令:
pip?install?xgboost若Python版本為3.X,則執行命令為pip3 install xgboost。安裝完畢后,即可在Python里直接引用XGBoost包,如下:
import?xgboost?as?xgb2. 通過源碼編譯安裝
雖然通過pip安裝XGBoost雖然方便,但其安裝的XGBoost可能并非最新版本。源碼編譯安裝XGBoost主要分為兩個步驟:① 通過C++代碼構建共享庫;② 安裝相應語言包。
1)構建共享庫
Linux下首先通過Git將XGBoost項目從github上克隆下來。因為XGBoost使用了Git submodules來管理依賴,因此在執行克隆時需加上--recursive選項,然后通過make對源碼直接編譯,如下:
git?clone?--recursive?https://github.com/dmlc/xgboost cd?xgboost make2)Python包安裝
共享庫編譯完成之后,即可安裝相應的語言包,此處以Python包為例。XGBoost使用Distutils來實現Python環境中的構建和安裝,對于用戶來講安裝過程十分簡單。XGBoost的Python包在python-package中,用戶只需進入該目錄然后執行安裝命令即可,如下:
cd?python-package sudo?python?setup.py?install04 XGBoost告訴你蘑菇是否有毒
XGBoost安裝完成后,本節通過一個簡單的示例,介紹如何使用XGBoost解決機器學習問題。該示例使用的是XGBoost自帶的數據集(位于/demo/data文件夾下),該數據集描述的是不同蘑菇的相關特征,比如大小、顏色等,并且每一種蘑菇都會被標記為可食用的(標記為0)或有毒的(標記為1)。
我們的任務是對蘑菇特征數據進行學習,訓練相關模型,然后利用訓練好的模型預測未知的蘑菇樣本是否具有毒性。下面用XGBoost解決該問題,如下:
import?xgboost?as?xgb #?數據讀取 xgb_train?=?xgb.DMatrix('${XGBOOST_PATH}/demo/data/agaricus.txt.train?') xgb_test?=?xgb.DMatrix('${XGBOOST_PATH}/demo/data/agaricus.txt.test?')#?定義模型訓練參數 params?=?{"objective":?"binary:logistic","booster":?"gbtree","max_depth":?3} #?訓練輪數 num_round?=?5#?訓練過程中實時輸出評估結果 watchlist?=?[(xgb_train,?'train'),?(xgb_test,?'test')]#?模型訓練 model?=?xgb.train(params,?xgb_train,?num_round,?watchlist)首先讀取訓練集和測試集數據(其中${XGBOOST_PATH}代表XGBoost的根目錄路徑),XGBoost會將數據加載為自定義的矩陣DMatrix。數據加載完畢后,定義模型訓練參數,然后對模型進行訓練,訓練過程的輸出如圖1所示。
▲圖1 訓練過程輸出
由圖1中可以看到,XGBoost訓練過程中實時輸出了訓練集和測試集的錯誤率評估結果。隨著訓練的進行,訓練集和測試集的錯誤率均在不斷下降,說明模型對于特征數據的學習是十分有效的。最后,模型訓練完畢后,即可通過訓練好的模型對測試集數據進行預測。預測代碼如下:
#?模型預測 preds?=?model.predict(xgb_test) preds輸出:
array([?0.10455427,??0.80366629,??0.10455427,?...,??0.89609396,0.10285233,??0.89609396],?dtype=float32)可以看到,預測結果為一個浮點數的數組,其數組大小和測試集的樣本數量是一致的。數組中的值均在0~1的區間內,每個值對應一個樣本。該值可以看作是模型對于該樣本的預測概率,即模型認為該蘑菇是有毒蘑菇的概率。
關于作者:何龍,現就職于滴滴出行,XGBoost開源社區貢獻者,專注于人工智能和機器學習領域,從底層算法原理到上層應用實踐都有廣泛的興趣和研究。較早接觸XGBoost,熟悉XGBoost應用開發,深入閱讀源碼,具有豐富的項目開發經驗。
本文摘編自《深入理解XGBoost:高效機器學習算法與進階》,經出版方授權發布。
延伸閱讀《深入理解XGBoost》
點擊上方鏈接了解及購買
轉載請聯系微信:DoctorData
推薦語:知名互聯網公司資深工程師撰寫,打通高效機器學習脈絡,掌握競賽神器XGBoost。以機器學習基礎知識做鋪墊,深入剖析XGBoost原理、分布式實現、模型優化、深度應用等。
有話要說????
Q:?你想用XGBoost實現哪些神操作?
歡迎留言與大家分享
猜你想看????
搜索引擎的競價排名是怎樣實現的?
盤點科幻作品中的機器人,哆啦A夢、阿拉蕾、變形金剛…你最想擁有?
一個月讀完6本書?這些燒腦神書,你能讀完1本,就是學霸!
一文看懂數據預處理最重要的3種思想和方法
更多精彩????
在公眾號對話框輸入以下關鍵詞
查看更多優質內容!
PPT?|?讀書?|?書單?|?硬核 |?干貨?
大數據?|?揭秘?|?Python?|?可視化
AI?|?人工智能?|?5G?|?中臺
機器學習?|?深度學習?|?神經網絡
合伙人?|?1024?|?大神?|?數學
據統計,99%的大咖都完成了這個神操作
????
總結
以上是生活随笔為你收集整理的腾讯阿里都在用!机器学习最热研究方向入门,附学习路线图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6本书,读懂2022年最火的边缘计算
- 下一篇: 这才是真正适合小白的教程:Python有