XGBoost是處理不同類(lèi)型表格數(shù)據(jù)的最著名的算法,LightGBM 和Catboost也是為了修改他的缺陷而發(fā)布的。9月12日XGBoost發(fā)布了新的2.0版,本文除了介紹讓XGBoost的完整歷史以外,還將介紹新機(jī)制和更新。
這是一篇很長(zhǎng)的文章,因?yàn)槲覀兪紫葟奶荻仍鰪?qiáng)決策樹(shù)開(kāi)始。
在更嚴(yán)格的數(shù)學(xué)語(yǔ)言中,決策樹(shù)表示一個(gè)函數(shù)T:X→Y,其中X是特征空間,Y可以是連續(xù)值(在回歸的情況下)或類(lèi)標(biāo)簽(在分類(lèi)的情況下)。我們可以將數(shù)據(jù)分布表示為D和真函數(shù)f:X→Y。決策樹(shù)的目標(biāo)是找到與f(x)非常接近的T(x),理想情況下是在概率分布D上。
與樹(shù)T相關(guān)的風(fēng)險(xiǎn)R相對(duì)于f表示為T(mén)(x)和f(x)之間的損失函數(shù)的期望值:
構(gòu)建決策樹(shù)的主要目標(biāo)是構(gòu)建一個(gè)能夠很好地泛化到新的、看不見(jiàn)的數(shù)據(jù)的模型。在理想情況下,我們知道數(shù)據(jù)的真實(shí)分布D,可以直接計(jì)算任何候選決策樹(shù)的風(fēng)險(xiǎn)或預(yù)期損失。但是在實(shí)踐中真實(shí)的分布是未知的。
所以我們依賴(lài)于可用數(shù)據(jù)的子集來(lái)做出決策。這就是啟發(fā)式方法的概念出現(xiàn)的地方。
基尼指數(shù)是一種雜質(zhì)度量,用于量化給定節(jié)點(diǎn)中類(lèi)別的混合程度。給定節(jié)點(diǎn)t的基尼指數(shù)G的公式為:
式中p_i為節(jié)點(diǎn)t中屬于第i類(lèi)樣本的比例,c為類(lèi)的個(gè)數(shù)。
基尼指數(shù)的范圍從0到0.5,其中較低的值意味著節(jié)點(diǎn)更純粹(即主要包含來(lái)自一個(gè)類(lèi)別的樣本)。
基尼指數(shù)(Gini Index)和信息增益(Information Gain)都是量化區(qū)分不同階層的特征的“有用性”的指標(biāo)。從本質(zhì)上講,它們提供了一種評(píng)估功能將數(shù)據(jù)劃分為類(lèi)的效果的方法。通過(guò)選擇雜質(zhì)減少最多的特征(最低的基尼指數(shù)或最高的信息增益),就可以做出一個(gè)啟發(fā)式?jīng)Q策,這是樹(shù)生長(zhǎng)這一步的最佳局部選擇。
決策樹(shù)也會(huì)過(guò)度擬合,尤其是當(dāng)它們很深的時(shí)候,會(huì)捕獲數(shù)據(jù)中的噪聲。有兩個(gè)主要策略可以解決這個(gè)問(wèn)題:
找不到最優(yōu)風(fēng)險(xiǎn)最小化的樹(shù),是因?yàn)槲覀儾恢勒鎸?shí)的數(shù)據(jù)分布d。所以只能使用啟發(fā)式方法,如基尼指數(shù)或信息增益,根據(jù)可用數(shù)據(jù)局部?jī)?yōu)化樹(shù),而謹(jǐn)慎分割和修剪等技術(shù)有助于管理模型的復(fù)雜性,避免過(guò)擬合。
隨機(jī)森林是決策樹(shù)T_1, T_2, ....的集合, T_n,其中每個(gè)決策樹(shù)T_i:X→Y將輸入特征空間X映射到輸出Y,輸出Y可以是連續(xù)值(回歸)或類(lèi)標(biāo)簽(分類(lèi))。
隨機(jī)森林集合定義了一個(gè)新函數(shù)R:X→Y,它對(duì)所有單個(gè)樹(shù)的輸出進(jìn)行多數(shù)投票(分類(lèi))或平均(回歸),數(shù)學(xué)上表示為:
與決策樹(shù)一樣,隨機(jī)森林也旨在近似概率分布D上的真實(shí)函數(shù)f:X→Y。D在實(shí)踐中通常是未知的,因此有必要使用啟發(fā)式方法來(lái)構(gòu)建單個(gè)樹(shù)。
與隨機(jī)森林相關(guān)的相對(duì)于f的風(fēng)險(xiǎn)R_RF是R(x)和f(x)之間損失函數(shù)的期望值。考慮到R是T的集合,風(fēng)險(xiǎn)通常低于與單個(gè)樹(shù)相關(guān)的風(fēng)險(xiǎn),這有助于泛化:
與單一決策樹(shù)相比,隨機(jī)森林不太容易過(guò)度擬合,這要?dú)w功于Bagging和特征隨機(jī)化,這在樹(shù)之間創(chuàng)造了多樣性。風(fēng)險(xiǎn)在多棵樹(shù)上平均,使模型對(duì)數(shù)據(jù)中的噪聲更有彈性。
隨機(jī)森林中的Bagging實(shí)現(xiàn)了多個(gè)目標(biāo):它通過(guò)在不同的樹(shù)上平均預(yù)測(cè)來(lái)減少過(guò)擬合,每棵樹(shù)都在不同的自舉樣本上訓(xùn)練,從而使模型對(duì)數(shù)據(jù)中的噪聲和波動(dòng)更具彈性。這也減少了方差可以得到更穩(wěn)定和準(zhǔn)確的預(yù)測(cè)。樹(shù)的集合可以捕獲數(shù)據(jù)的不同方面,提高了模型對(duì)未見(jiàn)數(shù)據(jù)的泛化。并且還可以提供更高的健壯性,因?yàn)閬?lái)自其他樹(shù)的正確預(yù)測(cè)通常會(huì)抵消來(lái)自單個(gè)樹(shù)的錯(cuò)誤。該技術(shù)可以增強(qiáng)不平衡數(shù)據(jù)集中少數(shù)類(lèi)的表示,使集成更適合此類(lèi)挑戰(zhàn)。
隨機(jī)森林它在單個(gè)樹(shù)級(jí)別采用啟發(fā)式方法,但通過(guò)集成學(xué)習(xí)減輕了一些限制,從而在擬合和泛化之間提供了平衡。Bagging和特征隨機(jī)化等技術(shù)進(jìn)一步降低了風(fēng)險(xiǎn),提高了模型的健壯性。
梯度增強(qiáng)決策樹(shù)(GBDT)也是一種集成方法,它通過(guò)迭代地增加決策樹(shù)來(lái)構(gòu)建一個(gè)強(qiáng)預(yù)測(cè)模型,每棵新樹(shù)旨在糾正現(xiàn)有集成的錯(cuò)誤。在數(shù)學(xué)上,GBDT也表示一個(gè)函數(shù)T:X→Y,但它不是找到一個(gè)單一的T(X),而是形成一個(gè)弱學(xué)習(xí)器t_1(X), t_2(X),…的序列,它們共同工作以近似真實(shí)函數(shù)f(X)。與隨機(jī)森林(Random Forest)通過(guò)Bagging獨(dú)立構(gòu)建樹(shù)不同,GBDT在序列中構(gòu)建樹(shù),使用梯度下降最小化預(yù)測(cè)值和真實(shí)值之間的差異,通常通過(guò)損失函數(shù)表示。
在GBDT中,在構(gòu)建每棵樹(shù)并進(jìn)行預(yù)測(cè)之后,計(jì)算預(yù)測(cè)值與實(shí)際值之間的殘差(或誤差)。這些殘差本質(zhì)上是梯度的一種形式——表明損失函數(shù)是如何隨其參數(shù)變化的。然后一個(gè)新的樹(shù)適合這些殘差,而不是原始的結(jié)果變量,有效地采取“步驟”,利用梯度信息最小化損失函數(shù)。這個(gè)過(guò)程是重復(fù)的,迭代地改進(jìn)模型。
“梯度”一詞意味著使用梯度下降優(yōu)化來(lái)指導(dǎo)樹(shù)的順序構(gòu)建,旨在不斷最小化損失函數(shù),從而使模型更具預(yù)測(cè)性。
單個(gè)樹(shù)的高偏差:GBDT通過(guò)迭代修正單個(gè)樹(shù)的誤差,可以獲得比單個(gè)樹(shù)更高的性能。
模型復(fù)雜性:隨機(jī)森林旨在減少模型方差,而GBDT在偏差和方差之間提供了一個(gè)很好的平衡,通常可以獲得更好的整體性能。
梯度增強(qiáng)決策樹(shù)比決策樹(shù)和隨機(jī)森林具有性能、適應(yīng)性和優(yōu)化方面的優(yōu)勢(shì)。當(dāng)需要較高的預(yù)測(cè)準(zhǔn)確性并愿意花費(fèi)計(jì)算資源來(lái)微調(diào)模型時(shí),它們特別有用。
在關(guān)于基于樹(shù)的集成方法的討論中,焦點(diǎn)經(jīng)常落在標(biāo)準(zhǔn)的優(yōu)點(diǎn)上:對(duì)異常值的健壯性、易于解釋等等。但是XGBoost還有其他特性,使其與眾不同,并在許多場(chǎng)景中具有優(yōu)勢(shì)。
通常,圍繞XGBoost的討論都集中在它的預(yù)測(cè)能力上。不常被強(qiáng)調(diào)的是它的計(jì)算效率,特別是在并行和分布式計(jì)算方面。該算法利用特征和數(shù)據(jù)點(diǎn)來(lái)并行化樹(shù)結(jié)構(gòu),使其能夠處理更大的數(shù)據(jù)集,并且比傳統(tǒng)實(shí)現(xiàn)運(yùn)行得更快。
XGBoost采用了一種獨(dú)特的方法來(lái)處理缺失值。與其他通常需要單獨(dú)預(yù)處理步驟的模型不同,XGBoost可以在內(nèi)部處理丟失的數(shù)據(jù)。在訓(xùn)練過(guò)程中,算法為缺失值找到最佳的imputation值(或在樹(shù)結(jié)構(gòu)中移動(dòng)的方向),然后將其存儲(chǔ)以供將來(lái)預(yù)測(cè)。這意味著XGBoost處理丟失數(shù)據(jù)的方法是自適應(yīng)的,可以因節(jié)點(diǎn)而異,從而提供對(duì)這些值的更細(xì)致的處理。
雖然增強(qiáng)算法天生就容易過(guò)度擬合,特別是對(duì)于有噪聲的數(shù)據(jù),但XGBoost在訓(xùn)練過(guò)程中直接將L1 (Lasso)和L2 (Ridge)正則化合并到目標(biāo)函數(shù)中。這種方法提供了一種額外的機(jī)制來(lái)約束單個(gè)樹(shù)的復(fù)雜性,而不是簡(jiǎn)單地限制它們的深度,從而提高泛化。
XGBoost設(shè)計(jì)用于高效地處理稀疏數(shù)據(jù),而不僅僅是密集矩陣。在使用詞袋或TF-IDF表示的自然語(yǔ)言處理等領(lǐng)域,特征矩陣的稀疏性可能是一個(gè)重大的計(jì)算挑戰(zhàn)。XGBoost利用壓縮的內(nèi)存高效數(shù)據(jù)結(jié)構(gòu),其算法被設(shè)計(jì)為有效地遍歷稀疏矩陣。
雖然很少被討論,但硬件優(yōu)化是XGBoost的一個(gè)亮點(diǎn)。它對(duì)CPU上的內(nèi)存效率和計(jì)算速度進(jìn)行了優(yōu)化,并支持GPU上的訓(xùn)練模型,進(jìn)一步加快了訓(xùn)練過(guò)程。
大多數(shù)集成方法提供特征重要性度量,包括隨機(jī)森林和標(biāo)準(zhǔn)梯度增強(qiáng)。但是XGBoost提供了一套更全面的特性重要性度量,包括增益、頻率和覆蓋范圍,從而允許對(duì)模型進(jìn)行更詳細(xì)的解釋。當(dāng)需要了解哪些特征是重要的,以及它們?nèi)绾螌?duì)預(yù)測(cè)做出貢獻(xiàn)時(shí),這一點(diǎn)非常重要。
另一個(gè)未被討論的特性是提前停止。謹(jǐn)慎分割和修剪等技術(shù)用于防止過(guò)擬合,而XGBoost提供了一種更自動(dòng)化的方法。一旦模型的性能在驗(yàn)證數(shù)據(jù)集上停止改進(jìn),訓(xùn)練過(guò)程就可以停止,從而節(jié)省了計(jì)算資源和時(shí)間。
雖然基于樹(shù)的算法可以很好地處理分類(lèi)變量,但是XGBoost采用了一種獨(dú)特的方法。不需要獨(dú)熱編碼或順序編碼,可以讓分類(lèi)變量保持原樣。XGBoost對(duì)分類(lèi)變量的處理比簡(jiǎn)單的二進(jìn)制分割更細(xì)致,可以捕獲復(fù)雜的關(guān)系,而無(wú)需額外的預(yù)處理。
XGBoost的獨(dú)特功能使其不僅是預(yù)測(cè)精度方面的最先進(jìn)的機(jī)器學(xué)習(xí)算法,而且是高效和可定制的算法。它能夠處理現(xiàn)實(shí)世界的數(shù)據(jù)復(fù)雜性,如缺失值、稀疏性和多重共線(xiàn)性,同時(shí)計(jì)算效率高,并提供詳細(xì)的可解釋性,使其成為各種數(shù)據(jù)科學(xué)任務(wù)的寶貴工具。
上面是我們介紹的一些背景知識(shí),下面開(kāi)始我們將介紹XGBoost 2.0提供了幾個(gè)有趣的更新,可能會(huì)影響機(jī)器學(xué)習(xí)社區(qū)和研究。
前面我們談到了XGBoost中的決策樹(shù)是如何使用二階泰勒展開(kāi)來(lái)近似目標(biāo)函數(shù)的。在2.0中向具有矢量葉輸出的多目標(biāo)樹(shù)轉(zhuǎn)變。這使得模型能夠捕捉目標(biāo)之間的相關(guān)性,這一特征對(duì)于多任務(wù)學(xué)習(xí)尤其有用。它與XGBoost對(duì)正則化的強(qiáng)調(diào)一致,以防止過(guò)擬合,現(xiàn)在允許正則化跨目標(biāo)工作。
XGBoost可以使用不同硬件。在2.0版本中,XGBoost簡(jiǎn)化了設(shè)備參數(shù)設(shè)置。“device”參數(shù)取代了多個(gè)與設(shè)備相關(guān)的參數(shù),如gpu_id, gpu_hist等,這使CPU和GPU之間的切換更容易。
XGBoost允許不同類(lèi)型的樹(shù)構(gòu)建算法。2.0版本將' hist '設(shè)置為默認(rèn)的樹(shù)方法,這可能會(huì)提高性能的一致性。這可以看作是XGBoost將基于直方圖的方法的效率提高了一倍。
XGBoost的新版本還提供了使用GPU的“近似”樹(shù)方法的初始支持。這可以看作是進(jìn)一步利用硬件加速的嘗試,這與XGBoost對(duì)計(jì)算效率的關(guān)注是一致的。
2.0通過(guò)提供一個(gè)新參數(shù)(max_cached_hist_node)來(lái)控制直方圖的CPU緩存大小,并通過(guò)用內(nèi)存映射替換文件IO邏輯來(lái)改進(jìn)外部?jī)?nèi)存支持,從而延續(xù)了這一趨勢(shì)。
考慮到XGBoost在各種排名任務(wù)中的強(qiáng)大性能,2.0版本引入了許多特性來(lái)改進(jìn)學(xué)習(xí)排名,例如用于配對(duì)構(gòu)建的新參數(shù)和方法,支持自定義增益函數(shù)等等。
結(jié)合分位數(shù)回歸XGBoost可以很好的適應(yīng)對(duì)不同問(wèn)題域和損失函數(shù)。它還為預(yù)測(cè)中的不確定性估計(jì)增加了一個(gè)有用的工具。
很久沒(méi)有處理表格數(shù)據(jù)了,所以一直也沒(méi)有對(duì)XGBoost有更多的關(guān)注,但是最近才發(fā)現(xiàn)發(fā)更新了2.0版本,所以感覺(jué)還是很好的。
XGBoost 2.0版本是一個(gè)全面的更新,它繼續(xù)建立在現(xiàn)有的可伸縮性、效率和靈活性?xún)?yōu)勢(shì)的基礎(chǔ)上,同時(shí)引入了可以為新的應(yīng)用程序和研究機(jī)會(huì)鋪平道路的功能。
本文鏈接:http://www.tebozhan.com/showinfo-26-12757-0.htmlXGBoost 2.0:對(duì)基于樹(shù)的方法進(jìn)行了重大更新
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com