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