小巧玲瓏:機(jī)器學(xué)習(xí)屆快刀XGBoost的介紹和使用
序言
XGBoost效率很高,在Kaggle等諸多比賽中使用廣泛,并且取得了不少好成績。為了讓公司的算法工程師,可以更加方便的使用XGBoost,我們將XGBoost更好地與公司已有的存儲(chǔ)資源和計(jì)算平臺(tái)進(jìn)行集成,將數(shù)據(jù)預(yù)處理、模型訓(xùn)練、模型預(yù)測、模型評估及可視化、模型收藏及分享等功能,在Tesla平臺(tái)中形成閉環(huán),同時(shí),數(shù)據(jù)的流轉(zhuǎn)實(shí)現(xiàn)了與TDW完全打通,讓整個(gè)機(jī)器學(xué)習(xí)的流程一體化。
XGBoost介紹
XGBoost的全稱為eXtreme Gradient Boosting,是GBDT的一種高效實(shí)現(xiàn),XGBoost中的基學(xué)習(xí)器除了可以是CART(gbtree)也可以是線性分類器(gblinear)。
什么是GBDT?
- GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的結(jié)論累加起來做最終答案。它在被提出之初就和SVM一起被認(rèn)為是泛化能力(generalization)較強(qiáng)的算法。GBDT的核心在于,每一棵樹學(xué)的是之前所有樹結(jié)論和的殘差,這個(gè)殘差就是一個(gè)加預(yù)測值后能得真實(shí)值的累加量。與隨機(jī)森林不同,隨機(jī)森林采用多數(shù)投票輸出結(jié)果;而GBDT則是將所有結(jié)果累加起來,或者加權(quán)累加起來。
XGBoost對GBDT的改進(jìn)
1 . 避免過擬合
目標(biāo)函數(shù)之外加上了正則化項(xiàng)整體求***解,用以權(quán)衡目標(biāo)函數(shù)的下降和模型的復(fù)雜程度,避免過擬合?;鶎W(xué)習(xí)為CART時(shí),正則化項(xiàng)與樹的葉子節(jié)點(diǎn)的數(shù)量T和葉子節(jié)點(diǎn)的值有關(guān)。
2 . 二階的泰勒展開,精度更高
不同于傳統(tǒng)的GBDT只利用了一階的導(dǎo)數(shù)信息的方式,XGBoost對損失函數(shù)做了二階的泰勒展開,精度更高。
第t次的損失函數(shù):
對上式做二階泰勒展開( g為一階導(dǎo)數(shù),h為二階導(dǎo)數(shù)):
3 . 樹節(jié)點(diǎn)分裂優(yōu)化
選擇候選分割點(diǎn)針對GBDT進(jìn)行了多個(gè)優(yōu)化。正常的樹節(jié)點(diǎn)分裂時(shí)公式如下:
XGBoost樹節(jié)點(diǎn)分裂時(shí),雖然也是通過計(jì)算分裂后的某種值減去分裂前的某種值,從而得到增益。但是相比GBDT,它做了如下改進(jìn):
- 通過添加閾值gamma進(jìn)行了剪枝來限制樹的生成
- 通過添加系數(shù)lambda對葉子節(jié)點(diǎn)的值做了平滑,防止過擬合。
- 在尋找***分割點(diǎn)時(shí),考慮傳統(tǒng)的枚舉每個(gè)特征的所有可能分割點(diǎn)的貪心法效率太低,XGBoost實(shí)現(xiàn)了一種近似的算法,即:根據(jù)百分位法列舉幾個(gè)可能成為分割點(diǎn)的候選者,然后從候選者中根據(jù)上面求分割點(diǎn)的公式計(jì)算找出***的分割點(diǎn)。
- 特征列排序后以塊的形式存儲(chǔ)在內(nèi)存中,在迭代中可以重復(fù)使用;雖然boosting算法迭代必須串行,但是在處理每個(gè)特征列時(shí)可以做到并行。
整體上,通過上述的3個(gè)優(yōu)化,加上其易用性,不太需要編程,XGBoost目前是GBDT體系中***的工具。但是值得留意的是,當(dāng)數(shù)據(jù)量很大,尤其是維度很高的情況下,XGBoost的性能會(huì)下降較快,這時(shí)推進(jìn)大家可以試試騰訊自己的Angel,其GBDT比XGBoost性能更好噢
TDW體系中的XGBoost介紹
XGBoost在TDW體系中以兩種形式存在
提供出了拖拽式的組件,來簡化用戶使用成本
提供出了maven依賴,來讓用戶享受Spark Pipeline的流暢
1. Tesla平臺(tái)上的3個(gè)組件:
- XGBoost-spark-ppc組件(基于社區(qū)版0.7,以Spark作業(yè)形式運(yùn)行在PowerPC機(jī)型的集群上)
- XGBoost-spark-x86組件(基于社區(qū)版0.7,以Spark作業(yè)形式運(yùn)行在x86機(jī)型的集群上)
- XGBoost-yarn組件(基于社區(qū)版0.4,以Yarn作業(yè)形式運(yùn)行在x86機(jī)型的集群上)
目前來看,XGBoost的ppc版本,性能比x86的好,建議大家優(yōu)先選擇。
2. 公司Maven庫中的3個(gè)依賴:
XGBoost4j-ppc(封裝社區(qū)版0.7的API,在PowerPC機(jī)型上進(jìn)行的編譯)
XGBoost4j-x86(封裝社區(qū)版0.7的API,在x86機(jī)型上進(jìn)行的編譯)
XGBoost4j-toolkit(封裝HDFS IO、TDW IO、Model IO等功能)
Tesla中的XGBoost-on-spark組件介紹
Tesla中XGBoost-on-spark組件根據(jù)集群的機(jī)型區(qū)分成:XGBoost-spark-ppc組件和XGBoost-spark-x86組件。將以前的XGBoost-yarn組件進(jìn)行了升級(jí),體現(xiàn)在了:
數(shù)據(jù)源之間的打通、作業(yè)調(diào)試更友好、IO方式更豐富、數(shù)據(jù)處理的上下游延伸更廣、model支持在線服務(wù)等方面。
1.數(shù)據(jù)源之間的打通
消除了不同HDFS集群上的權(quán)限問題
與TDW打通,數(shù)據(jù)流轉(zhuǎn)更順暢,開發(fā)成本更低
- 用戶可以不再編寫程序生成LibSVM格式的數(shù)據(jù)文件,而是通過Hive或者Spark SQL生成TDW特征表,通過選擇TDW特征表的某些列(selected_cols=1-2,4,8-10),由XGBoost-on-spark組件后臺(tái)生成libsvm類型的輸入
- 可以針對TDW分區(qū)表,借助Tesla作業(yè)定時(shí)調(diào)度機(jī)制,可以進(jìn)行XGBoost作業(yè)的例行化調(diào)度運(yùn)行
2.作業(yè)調(diào)試更友好
以Spark作業(yè)的形式,而非直接的Yarn作業(yè)的形式運(yùn)行,用戶對作業(yè)的運(yùn)行情況更清楚
- 可以查看作業(yè)的進(jìn)度
- 可以查看各節(jié)點(diǎn)上的日志信息
3.IO方式更豐富
輸入的數(shù)據(jù)集來源,可以為之前的HDFS上LibSVM格式的文件形式。也可以為一張TDW表,用戶通過選擇TDW表中的某些列,由XGBoost-on-spark組件在后臺(tái)生成LibSVM格式的輸入。
訓(xùn)練階段增加了特征重要度(weight、gain、cover)的輸出、以及3種類型model的輸出:文本格式(用戶可以直接查看)、LocalFile的二進(jìn)制格式(用戶可以下載到本地,利用python加載后在線預(yù)測)、HadoopFile的二進(jìn)制格式(用戶可以在Tesla環(huán)境中,利用Spark加載后離線批量預(yù)測)
模型輸出的3種格式舉例
4 . 數(shù)據(jù)處理的上下游延伸更廣
與Tesla平臺(tái)深度整合
- 可以拖拽Tesla的組件:數(shù)據(jù)切分、模型評估,實(shí)現(xiàn)數(shù)據(jù)處理的上下游功能
- 可以利用Tesla的功能:參數(shù)替換、并發(fā)設(shè)置,進(jìn)行批量調(diào)參
5 . model支持在線服務(wù)
可以利用Tesla的模型服務(wù),進(jìn)行模型導(dǎo)出、模型部署、在線預(yù)測
總結(jié)
XGBoost是機(jī)器學(xué)習(xí)的利器,雖然小巧,但是功能強(qiáng)大,以其被實(shí)戰(zhàn)檢驗(yàn)過的高效,吸引了很多使用者。我們針對用戶痛點(diǎn)進(jìn)行了諸多改進(jìn),實(shí)現(xiàn)了用戶在Tesla平臺(tái)中更加方便的使用,大大減少了用戶的開發(fā)成本,同時(shí),我們也開放出了XGBoost API,讓邏輯復(fù)雜的業(yè)務(wù)可以在自身系統(tǒng)中嵌入xgBoost,更加直接的對接TDW系統(tǒng)。后續(xù)有進(jìn)一步的需求,歡迎聯(lián)系Tesla團(tuán)隊(duì),我們將提供更好的機(jī)器學(xué)習(xí)和數(shù)據(jù)服務(wù)。
原文鏈接:http://t.cn/RpkWG7c
作者:張萌
【本文是51CTO專欄作者“騰訊云技術(shù)社區(qū)”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系原作者獲取授權(quán)】