午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

XGBoost模型參數(shù)釋義

 Memo_Cleon 2024-04-16 發(fā)布于上海

公司在招聘面試候選人時(shí),面試的人一般是HR、小組主管和部門經(jīng)理,過(guò)程可以分為兩種形式。

第一種形式是三位面試官分別單獨(dú)面試候選人,問(wèn)的問(wèn)題可能相同也可能不同,面試官會(huì)根據(jù)候選人的表現(xiàn)分別給出結(jié)論,最后綜合三位的結(jié)論來(lái)決定錄用與否。這就是Bagging。
BaggingBootstrap AGGragatING縮寫而來(lái),是并行式集成學(xué)習(xí)方法的著名代表。它基于自助抽樣法(bootstrap sampling)來(lái)獲得多個(gè)采樣集,每個(gè)采樣集獨(dú)立地訓(xùn)練出一個(gè)基學(xué)習(xí)器,然后對(duì)所有基學(xué)習(xí)器的預(yù)測(cè)結(jié)果進(jìn)行投票或者平均來(lái)獲得最終的結(jié)果。Bagging的典型代表是Random Forests。
第二種形式是群面。HR、小組主管和部門經(jīng)理同時(shí)參加了面試,HR先問(wèn)了幾個(gè)問(wèn)題,小組主管根據(jù)候選人對(duì)HR的回應(yīng)問(wèn)了另外一些問(wèn)題,最后部門經(jīng)理在小組主管問(wèn)題的基礎(chǔ)上問(wèn)了其他一些問(wèn)題。最后綜合三位面試官對(duì)候選人的打分決定錄取或不錄取。這就是Boosting
Boosting是一種可將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的串行集成學(xué)習(xí)算法?!?/span>[周志華,機(jī)器學(xué)習(xí)]先從初始訓(xùn)練集訓(xùn)練出一個(gè)基學(xué)習(xí)器,再根據(jù)基學(xué)習(xí)器的表現(xiàn)對(duì)訓(xùn)練樣本分布進(jìn)行調(diào)整,使得先前基學(xué)習(xí)器做錯(cuò)的訓(xùn)練樣本在后續(xù)受到更多關(guān)注,然后基于調(diào)整后的樣本分布來(lái)訓(xùn)練下一個(gè)基學(xué)習(xí)器。如此重復(fù)進(jìn)行,直至基學(xué)習(xí)器數(shù)目達(dá)到事先指定的值,最終將這些基學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合”。Boosting的典型代表有AdaBoostGBDT系列(XGBoost、LightGBMCatBoost)。GBDT梯度提升決策樹(Gradient Boosting Decision Tree,GBDT也叫MARTMultiple Additive Regression Tree,如果是回歸任務(wù)則被稱為梯度提升回歸樹(Gradient Boosting Regression Tree。不同的Boosting算法調(diào)整分布的方法是不同的,比如AdaBoost算法,在每一輪迭代中都會(huì)更新樣本的權(quán)重,將學(xué)錯(cuò)樣本的權(quán)重調(diào)高,而在GBDT中則是更新回歸目標(biāo),將新一輪迭代模型的損失函數(shù)的負(fù)梯度作為新一輪的標(biāo)簽訓(xùn)練出一個(gè)新的弱分類器,最終實(shí)現(xiàn)模型的更新。當(dāng)損失函數(shù)為平方損失函數(shù)的時(shí)候,當(dāng)前模型損失函數(shù)的負(fù)梯度值剛好等于殘差,此時(shí)每一輪建立的新的基學(xué)習(xí)器都在減少殘差。梯度是一種數(shù)學(xué)概念(一個(gè)矢量,其方向上的方向?qū)?shù)最大,其大小正好是此最大方向?qū)?shù)),一個(gè)函數(shù)的梯度方向是函數(shù)上升最快的方向,負(fù)梯度方向是函數(shù)下降最快的方向。
與并行的Bagging的不同在于,Boosting一個(gè)接一個(gè)的來(lái)訓(xùn)練基學(xué)習(xí)器(串行),每一個(gè)基學(xué)習(xí)器都是在修正前面學(xué)習(xí)器偏差的基礎(chǔ)上給出決策,后一個(gè)模型參數(shù)設(shè)置需要前一輪模型預(yù)測(cè)結(jié)果。Bagging采用的是有回放的Bootstrap自主抽樣來(lái)從原始數(shù)據(jù)集中選出每一輪迭代的訓(xùn)練集,不同的訓(xùn)練集之間是相對(duì)獨(dú)立的,而Boosting每一輪的訓(xùn)練集并沒有發(fā)生變化,只是訓(xùn)練集中每個(gè)個(gè)案在不同的基學(xué)習(xí)器中的權(quán)重在更新。Bagging的訓(xùn)練集中,每個(gè)樣本的權(quán)重是相同的,每個(gè)基學(xué)習(xí)器在最終決策中權(quán)重也是一樣的,但Boosting的訓(xùn)練集中每個(gè)樣本的權(quán)重不同(偏差越大權(quán)重越大),而且可以讓每個(gè)基學(xué)習(xí)器在最終決策中權(quán)重也不一樣(分類誤差越小權(quán)重越大)。
XGBoost模型(XGBoosteXtreme Gradient Boosting)是基于boosting框架的一種提升樹模型。直接跳過(guò)GBDT來(lái)理解XGBoost確實(shí)不是一件容易的事情,此次筆記通過(guò)釋義xgboost::xgb.train函數(shù)的各種參數(shù)來(lái)理解XGBoost模型的算法。其后用一個(gè)示例來(lái)實(shí)操演示一下過(guò)程。
xgboost::xgb.train提供了三種基學(xué)習(xí)器:樹提升器、線性提升器和基于深度神經(jīng)網(wǎng)絡(luò)的dropout 技術(shù)的提升樹模型。其中樹模型是最為常用的基學(xué)習(xí)器。
樹模型結(jié)構(gòu)的基本概念:

節(jié)、節(jié)點(diǎn)(Node):樹模型中滿足某個(gè)標(biāo)準(zhǔn)的一個(gè)個(gè)案的群體;

分枝(Split):種樹時(shí)依據(jù)某種原則選擇分類屬性和拆分點(diǎn)將樣本分為不同亞群;

邊(Edge):父結(jié)點(diǎn)指向子結(jié)點(diǎn)的連線;

根節(jié)點(diǎn)(Root Node):樹的起始點(diǎn)(包括所有個(gè)案),根節(jié)點(diǎn)沒有父節(jié)點(diǎn);

葉節(jié)點(diǎn)(Leaf Node:樹的終止節(jié)點(diǎn),葉節(jié)點(diǎn)沒有子節(jié)點(diǎn);

節(jié)點(diǎn)的度(Degree):結(jié)點(diǎn)的子結(jié)點(diǎn)個(gè)數(shù),二叉樹的度最大為2;

節(jié)點(diǎn)的層(Level):根結(jié)點(diǎn)的層為1  ,根結(jié)點(diǎn)的子結(jié)點(diǎn)的層為 2,……

節(jié)點(diǎn)的高度(Height):離該結(jié)點(diǎn)最遠(yuǎn)的葉結(jié)點(diǎn)到該結(jié)點(diǎn)所經(jīng)過(guò)的邊的數(shù)量;

節(jié)點(diǎn)的深度(Depth):根結(jié)點(diǎn)到該結(jié)點(diǎn)所經(jīng)過(guò)的邊的數(shù)量;

樹的深度Depth:等于樹的高度,根結(jié)點(diǎn)到離根結(jié)點(diǎn)最遠(yuǎn)的葉結(jié)點(diǎn)所經(jīng)過(guò)的邊的數(shù)量。

機(jī)器學(xué)習(xí)的最基本術(shù)語(yǔ):

在傳統(tǒng)的醫(yī)學(xué)統(tǒng)計(jì)中,樣本(Samp1e)指的是從總體(Population)中隨機(jī)抽取的部分觀察單位(Observed unit),這里的觀察單位是統(tǒng)計(jì)研究的基本單位,即個(gè)體/個(gè)案(IndividualCase)。但在機(jī)器學(xué)習(xí)領(lǐng)域,樣本(Samp1e)或示例 (Instance)描述的卻是個(gè)體。另外傳統(tǒng)醫(yī)學(xué)統(tǒng)計(jì)中的自變量(Independent variable ,也稱解釋變量、預(yù)測(cè)變量)在機(jī)器學(xué)習(xí)領(lǐng)域稱為屬性(Attribute)或特征Feature),而傳統(tǒng)醫(yī)學(xué)統(tǒng)計(jì)中的因變量(Dependent variable應(yīng)變量、被解釋變量、響應(yīng)/反應(yīng)變量、結(jié)局變量)在機(jī)器學(xué)習(xí)領(lǐng)域則稱為標(biāo)簽(label)。

XGBoost模型理論介紹及介紹PPT來(lái)自xgboost算法的發(fā)明者陳天奇

Tianqi Chen,Carlos Guestrin.XGBoost: A Scalable Tree Boosting.System. https://github.com/dmlc/xgboost.

Tianqi Chen.Introduction to Boosted Trees.

Tianqi Chen’s PPT2014 from http://www./

如網(wǎng)絡(luò)受限,可從留言中提供的地址下載。

eXtreme Gradient Boosting Training函數(shù)(xgboost包):

xgb.train(params=list(),data,nrounds,watchlist=list(),obj=NULL,feval=NULL,verbose=1,print_every_n=1L,early_stopping_rounds=NULL,maximize=NULL,save_period=NULL,save_name="xgboost.model",xgb_model=NULL,callbacks=list(),...)

xgboost(data=NULL,label=NULL,missing=NA,weight=NULL,params=list(),nrounds,verbose=1,print_every_n=1L,early_stopping_rounds=NULL,maximize=NULL,save_period=NULL,save_name="xgboost.model",xgb_model=NULL,callbacks=list(),...)

注:參數(shù)中的下劃線“_”也可以使用點(diǎn)“.”來(lái)替換。xgb.train是一個(gè)用于訓(xùn)練XGBoost模型的高級(jí)函數(shù),xgboost函數(shù)則是xgb.train的一個(gè)更簡(jiǎn)單的包裝器。

函數(shù)的各項(xiàng)參數(shù)釋義:

params:參數(shù)列表。主要包括三類:通用參數(shù)(General Parameters)、提升器參數(shù)(Booster Parameters)和任務(wù)參數(shù)(Task Parameters)。通用參數(shù)主要選擇基學(xué)習(xí)器類型,如樹模型還是線性模型;提升器參數(shù)針對(duì)選擇的基學(xué)習(xí)器進(jìn)行的設(shè)置;學(xué)習(xí)任務(wù)參數(shù)主要是指定訓(xùn)練模型的損失函數(shù),使用驗(yàn)證集做模型評(píng)估時(shí)指定評(píng)價(jià)指標(biāo)等。參數(shù)詳情介紹可參考xgboost包幫助文件XGBoost文件[https://xgboost./en/latest/parameter.html]。

[1]通用參數(shù)

  • booster選擇基學(xué)習(xí)器,gbtree(默認(rèn),樹提升器。詳細(xì)介紹見2.1)、gblinear(線性提升器。詳細(xì)介紹見2.3)、dart(基于深度神經(jīng)網(wǎng)絡(luò)的dropout 技術(shù)的提升樹。詳細(xì)介紹見2.2);

  • device:指定運(yùn)行設(shè)備CPUcpu,默認(rèn))還是GPUcuda),這個(gè)參數(shù)應(yīng)該是為建立需要復(fù)雜運(yùn)算的大模型準(zhǔn)備的,只是建立一個(gè)小臨床模型其實(shí)默認(rèn)就好;
  • verbosityXGBoost打印運(yùn)行信息的詳細(xì)程度。0不打印、1打印warning級(jí)別的信息、2打印info級(jí)別的信息、3打印debug級(jí)別的信息。默認(rèn)是1;
  • validate_parameters:設(shè)置為true時(shí),XGBoost將對(duì)輸入?yún)?shù)進(jìn)行驗(yàn)證,以檢查是否使用了參數(shù),如存在未知參數(shù)時(shí)會(huì)發(fā)出警告;
  • nthread指定XGBoost運(yùn)行時(shí)的并行線程的數(shù)量,默認(rèn)為最大可用線程數(shù);
  • disable_default_eval_metric是否禁用模型默認(rèn)的評(píng)價(jià)指標(biāo),1或者true表示禁用,默認(rèn)false。

[2]提升器參數(shù)

2.1 gbtree參數(shù)
提升樹集成模型與回歸樹:
注:XGBoost集成模型由K個(gè)可加性函數(shù)組成。上述表達(dá)式中的y^i表示的是整個(gè)集成模型對(duì)某個(gè)個(gè)案i的估計(jì)值。這里的可加函數(shù)就是基學(xué)習(xí)器,XGBoost的基學(xué)習(xí)器常用樹模型,也可以是線性模型。當(dāng)采用樹模型時(shí),XGBoost是基于回歸樹的集成算法,單棵樹是回歸樹而不是分類樹?;貧w樹跟決策樹具有相同的決策規(guī)則,不同的是回歸樹的每個(gè)葉節(jié)點(diǎn)輸出是一個(gè)分值(Score),而不是一個(gè)標(biāo)簽(label,結(jié)局)。從這個(gè)角度理解,回歸樹就是一個(gè)將屬性映射到葉節(jié)點(diǎn)Score值的函數(shù),其參數(shù)有兩部分,一部分是葉節(jié)點(diǎn)索引函數(shù)q(結(jié)構(gòu)部分),其作用是將屬性映射到具體的某個(gè)葉節(jié)點(diǎn)上,即預(yù)測(cè)結(jié)果應(yīng)該屬于哪一個(gè)葉節(jié)點(diǎn);第二部分是該葉節(jié)點(diǎn)的輸出權(quán)重值w(權(quán)重部分),即前面說(shuō)的Socre值,輸出權(quán)重值是一個(gè)長(zhǎng)度為T的的一維向量(T是樹葉節(jié)點(diǎn)的的數(shù)目)?;貧w樹通過(guò)這個(gè)預(yù)測(cè)分值實(shí)現(xiàn)回歸、分類、排序等目的,實(shí)現(xiàn)什么樣的目的取決于如何定義目標(biāo)函數(shù)。

Additive Training (Boosting)

注:y^(t)i表示第t輪迭代后的集成模型對(duì)個(gè)體i的估計(jì)值,并不是第t樹單獨(dú)的預(yù)測(cè)結(jié)果。一個(gè)由K棵樹組成的XGBoost集成模型,經(jīng)過(guò)了K輪提升迭代。每次迭代過(guò)程中都會(huì)新生成一棵樹加入到當(dāng)前模型中,更新已有的模型(即所謂的Additive training或者叫Boosting)。經(jīng)過(guò)t輪迭代的模型(當(dāng)前模型)預(yù)測(cè)結(jié)果=前面經(jīng)過(guò)t-1輪迭代的模型預(yù)測(cè)結(jié)果+t棵提升樹的輸出結(jié)果。“前面經(jīng)過(guò)t-1輪迭代的模型”是已經(jīng)優(yōu)化好的確定模型,“t棵提升樹的輸出結(jié)果”是第t棵樹的葉節(jié)點(diǎn)輸出值。每輪迭代的結(jié)果是對(duì)集成模型的一次提升,t顆樹只是當(dāng)前模型的一個(gè)“子模型”,其構(gòu)造就是為了減少前t-1輪迭代后仍可能存在的誤差。每棵樹(每個(gè)函數(shù))貢獻(xiàn)的只是一個(gè)增量,最終模型等于每次迭代增量的累加和。

目標(biāo)函數(shù)與模型復(fù)雜度:

注:XGBoost目標(biāo)函數(shù)也就是整個(gè)模型的損失函數(shù),由兩部分組成:第一部分是傳統(tǒng)損失函數(shù),即訓(xùn)練誤差,衡量模型對(duì)數(shù)據(jù)的擬合程度,鼓勵(lì)低偏差(Bias);第二部分是正則化項(xiàng),懲罰復(fù)雜的模型鼓勵(lì)簡(jiǎn)單的模型,降低方差(Variance),從而控制模型的復(fù)雜程度防止過(guò)擬合。

每一輪迭代的任務(wù)就是尋找一個(gè)使目標(biāo)函數(shù)降低最大的函數(shù)ft(xi)[注:函數(shù)ft(xi)就是第t棵提升樹]。由于在構(gòu)造第t顆樹的時(shí)候,前t-1輪迭代的模型都已經(jīng)是確定好的,不管它們的復(fù)雜度是多少都已經(jīng)是一個(gè)常數(shù)了,所以上述公式中的常數(shù)項(xiàng)(constant)是面經(jīng)過(guò)t-1輪迭代的集成模型的復(fù)雜度(或者說(shuō)t-1顆樹的復(fù)雜度的累加和)。公式經(jīng)泰勒二階展開并進(jìn)行一些列的變簡(jiǎn)化(模型的盡頭是數(shù)學(xué)@_@,這里面的數(shù)學(xué)已經(jīng)超出了筆者能講明白的理解范圍了),結(jié)果如下:

其中gihi分別為損失函數(shù)在yi(t-1)處的梯度(損失函數(shù)的一階導(dǎo)數(shù))Hessian矩陣(損失函數(shù)的二階導(dǎo)數(shù))。梯度是一種數(shù)學(xué)概念(一個(gè)矢量,其方向上的方向?qū)?shù)最大,其大小正好是此最大方向?qū)?shù)),一個(gè)函數(shù)的梯度方向是函數(shù)上升最快的方向,負(fù)梯度方向是函數(shù)下降最快的方。

樹的復(fù)雜度定義:γ*葉節(jié)點(diǎn)數(shù)+1/2*α*L1范數(shù)+1/2*λ*L2范數(shù)2

葉節(jié)點(diǎn)數(shù)量越多,意味著樹的分裂次數(shù)越多,樹的深度越大,樹越復(fù)雜。樹的復(fù)雜度可以用樹的深度、內(nèi)部節(jié)點(diǎn)個(gè)數(shù)、葉子節(jié)點(diǎn)個(gè)數(shù)(T)、葉節(jié)點(diǎn)輸出分值(W)等來(lái)衡量。在基學(xué)習(xí)器是CART決策樹時(shí),XGBoost復(fù)雜度可以分拆成葉節(jié)點(diǎn)的個(gè)數(shù)T葉節(jié)點(diǎn)的輸出權(quán)重值w兩部分。其中葉節(jié)點(diǎn)數(shù)量被賦予了一個(gè)權(quán)重γ(這個(gè)權(quán)重實(shí)際上是節(jié)點(diǎn)的拆分點(diǎn)的拆分閾值,見后面介紹),而葉節(jié)點(diǎn)的權(quán)重值則是進(jìn)行了正則化。

以僅對(duì)權(quán)重進(jìn)行L2正則化為例,復(fù)雜度可以簡(jiǎn)化為:

結(jié)合前面對(duì)回歸樹的函數(shù)定義,目標(biāo)函數(shù)可以演化成(權(quán)重L2正則化):

在樹結(jié)構(gòu)q(x)確定后, 這一輪的目標(biāo)函數(shù)其實(shí)就可以確定了下來(lái)。因?yàn)閾?jù)此可以獲得使前這一輪(第t輪)目標(biāo)函數(shù)最小的葉結(jié)點(diǎn)j的最優(yōu)權(quán)重值w*,以及目標(biāo)函數(shù)的最小值(最優(yōu)值):

其實(shí)這就是一個(gè)一元二次方程,求w等于多少時(shí)Obj最小,最小值是多少。最優(yōu)權(quán)重值w*可通過(guò)損失函數(shù)的梯度和Hessian矩陣獲得。目標(biāo)函數(shù)的最優(yōu)值也被稱為結(jié)構(gòu)分?jǐn)?shù)structure score),表示在指定一個(gè)樹的結(jié)構(gòu)的時(shí),當(dāng)前這一輪的目標(biāo)函數(shù)最多減少值。其值越小,結(jié)構(gòu)越好。神奇之處在于最優(yōu)目標(biāo)函數(shù)(結(jié)構(gòu)分?jǐn)?shù))竟然與權(quán)重沒有一毛錢的關(guān)系。

那如何確定樹的結(jié)構(gòu)呢?這就是:

樹的生長(zhǎng)與剪枝:

樹的生長(zhǎng)最主要就是確定最佳的分裂屬性和拆分點(diǎn),理論上這需要枚舉所有特性上的所有可能的拆分點(diǎn)(精確貪婪算法),想想這種計(jì)算量都恐怖,所以還會(huì)常用一些其他的近似算法,比如先將數(shù)據(jù)分箱。

分類變量建議先進(jìn)行獨(dú)熱編碼(one-hot encoding)進(jìn)行編碼。

分裂后的增益Gain=分裂后-分裂前的結(jié)構(gòu)分?jǐn)?shù),分裂后的結(jié)構(gòu)分?jǐn)?shù)等于左子樹的結(jié)構(gòu)分?jǐn)?shù)和右子樹的結(jié)構(gòu)分?jǐn)?shù)之和。Gain值越大,說(shuō)明分裂后能使目標(biāo)函數(shù)減少越多,就越好:

新的分裂不一定會(huì)使得情況變得更好,為優(yōu)化這個(gè)目標(biāo)(對(duì)樹進(jìn)行剪枝),引入了新葉子的懲罰項(xiàng)γ。新的分裂是否合理可以看這個(gè)分裂能否降低足夠多的損失函數(shù)(結(jié)構(gòu)分?jǐn)?shù))。“足夠多”是多少呢?這就是γ,你可以把它理解為葉節(jié)點(diǎn)是否應(yīng)該進(jìn)一步拆分的閾值,當(dāng)新的分裂帶來(lái)的損失函數(shù)的減少(增益)小于這個(gè)γ值的時(shí)候就不進(jìn)行分裂操作。在樹的復(fù)雜度定義里,它是葉節(jié)點(diǎn)數(shù)量的一個(gè)權(quán)重(見前面復(fù)雜度定義),經(jīng)過(guò)數(shù)學(xué)上的變換,它被賦予了新的含義:拆分閾值。最佳的γ值也就是使損失函數(shù)減少最大時(shí)的最佳分割。

提升樹算法要點(diǎn):

公式中的ε(上圖中使用了ε的變體)是迭代提升的步長(zhǎng)(step-size)或收縮率(shrinkage),相當(dāng)于GBDT中的學(xué)習(xí)率。在Rxgboost函數(shù)中由參數(shù)eta來(lái)指定,通常設(shè)置為0.1左右,在R中則是默認(rèn)0.3。這是一個(gè)收縮參數(shù),可以理解為當(dāng)前樹(第t棵樹)葉節(jié)點(diǎn)輸出值的貢獻(xiàn)率,收縮率的加入減少了每提升棵樹的影響,為后面的樹留下了更多的預(yù)測(cè)空間,使得提升過(guò)程更加保守穩(wěn)健從而能防止模型過(guò)擬合。η值越小意味著模型需要更多的迭代次數(shù),但需要計(jì)算量越大收斂越慢。通俗一些講,為了避免步子過(guò)大扯著蛋(每次邁一大步很快逼近結(jié)果的方式容易過(guò)擬合),每次只邁一小步(也就是每輪的迭代中給每棵樹的輸出結(jié)果上乘上一個(gè)收縮率η),因?yàn)槊靠脴涞慕Y(jié)果都不值得你掏心掏肺的完全信任,他們只能代表真理的一部分,不過(guò)我們可以多學(xué)幾棵來(lái)彌補(bǔ)這種不足。
  • eta步長(zhǎng)、收縮率,相當(dāng)于GBDT中的學(xué)習(xí)率,取值[0,1],默認(rèn)值0.3。eta是一個(gè)收縮參數(shù),相當(dāng)于在進(jìn)行第t輪迭代時(shí)給當(dāng)前樹(第t棵樹,ft(xi))葉節(jié)點(diǎn)輸出值賦予了一個(gè)權(quán)重[參見前面gbtree介紹中的[Additive Training (Boosting)][提升樹算法要點(diǎn)]部分]。收縮率的加入減少了每棵樹的影響,使提升過(guò)程更加保守穩(wěn)定從而能防止模型過(guò)擬合。η值越小意味著模型的提升輪數(shù),但需要計(jì)算量越大;

  • gamma損失函數(shù)最小減少值。樹的葉節(jié)點(diǎn)如果進(jìn)一步分裂所要求的損失函數(shù)最小減少值,是目標(biāo)函數(shù)中衡量基學(xué)習(xí)器復(fù)雜度那一部分的函數(shù)中的一個(gè)超參數(shù),取值[0,∞),默認(rèn)值0對(duì)應(yīng)gbtree介紹中[樹的復(fù)雜度定義:γ*葉節(jié)點(diǎn)數(shù)+1/2*α*L1范數(shù)+1/2*λ*L2范數(shù)2]里復(fù)雜度中的γ,本是模型復(fù)雜度參數(shù)中葉節(jié)點(diǎn)數(shù)量的權(quán)重,經(jīng)一些列數(shù)學(xué)變化后其被賦予了新的意義:葉節(jié)點(diǎn)分裂的拆分閾值[注:參加gbtree介紹中[樹的生長(zhǎng)于剪枝]],新的分裂帶來(lái)的損失函數(shù)的減少(增益)小于這個(gè)γ值的時(shí)候就不進(jìn)行分裂操作。值越大,算法越保守,樹越簡(jiǎn)單;
  • max_depth樹的最大深度,取值[0,∞),默認(rèn)6,0表示深度沒有限制。值越大,樹越復(fù)雜,越容易出現(xiàn)過(guò)擬合。tree_method設(shè)置為exact時(shí)要求非0值;
  • min_child_weight子節(jié)點(diǎn)的權(quán)重閾值,即節(jié)點(diǎn)上個(gè)案權(quán)重(Hessian矩陣)的最小值和[注:參見gbtree介紹,min_child_weight對(duì)應(yīng)的是Hj值,等于h(i)的和,h(i)為個(gè)案的權(quán)重(葉節(jié)點(diǎn)中的樣本二階導(dǎo)數(shù))]。取值[0,∞),默認(rèn)為1表示葉節(jié)點(diǎn)上需要的最小樣本量。值越大,越不容易形成葉節(jié)點(diǎn),算法越保守,樹越簡(jiǎn)單。如果樹分枝步驟導(dǎo)致一個(gè)葉節(jié)點(diǎn)的個(gè)案權(quán)重之和小于該值,那么構(gòu)建過(guò)程將放棄進(jìn)一步的分枝。在線性回歸任務(wù)(gblinear)中,該參數(shù)對(duì)應(yīng)每個(gè)節(jié)點(diǎn)包含的最小樣本量,而在gbtreedart中,該參數(shù)就是葉節(jié)點(diǎn)包含樣本所有的二階偏導(dǎo)數(shù)之和。該參數(shù)是預(yù)剪枝參數(shù)之一,可避免過(guò)擬合;
  • max_delta_step限制每棵樹葉節(jié)點(diǎn)輸出值的最大步長(zhǎng),取值[0,∞),默認(rèn)0。取值為0意味著沒有約束;取值為正,則它會(huì)讓算法更加保守。通常不需要設(shè)置這個(gè)參數(shù)。當(dāng)采用logistic回歸分析類別非常不均衡的樣本時(shí)該參數(shù)可能會(huì)有用。將其設(shè)置為1-10可能有助于控制更新;
  • subsample數(shù)據(jù)的采樣比例,抽到的樣本用于訓(xùn)練模型(相當(dāng)于按行進(jìn)行隨機(jī)抽樣比例)。子采樣在每次提升迭代中都會(huì)進(jìn)行一次。防止模型過(guò)擬合的方法之一,但該值過(guò)小可能會(huì)導(dǎo)致欠擬合。在使用參數(shù)eta和增加nrounds值時(shí)建議使用該參數(shù)。取值(0,1],默認(rèn)值為1表示所有樣本都用來(lái)建模,設(shè)置為0.5意味著XGBoost在種樹之前會(huì)隨機(jī)抽取一半的數(shù)據(jù)來(lái)訓(xùn)練樹模型;
  • sampling_method:從數(shù)據(jù)集中抽取建模樣本的方法。默認(rèn)uniform每個(gè)個(gè)案會(huì)被等概率抽取,通常設(shè)置subsample>=0.5以獲得良好結(jié)果;gradient_based需要tree_method 設(shè)置為 histdevice cuda才可用,每條數(shù)據(jù)被抽中的概率與梯度的正則化絕對(duì)值有關(guān),該方法即使subsample低至0.1也不會(huì)損失模型精度;
  • 列抽樣:colsample_bytree指定構(gòu)造每棵樹時(shí)列的隨機(jī)采樣率,每構(gòu)建一棵樹前都要抽取1次,樹所有節(jié)點(diǎn)的分裂特征都從這些抽取到的特征(每列對(duì)應(yīng)一個(gè)特征)中選擇。取值(0,1],默認(rèn)值為1表示樹節(jié)點(diǎn)從所有的特征中進(jìn)行選擇。除了為整棵樹隨機(jī)選擇建模特征,還可以為樹模型選擇每一級(jí)別的分裂特征,該層的節(jié)點(diǎn)分枝時(shí)使用這些特征,對(duì)應(yīng)參數(shù)是colsample_bylevel,該參數(shù)指定的是每一層級(jí)分裂特征的采樣比例,樹每達(dá)到一個(gè)新的深度級(jí)別就會(huì)進(jìn)行一次子這樣的列采樣,選擇的列(特征)是從為當(dāng)前樹選擇的列集中進(jìn)行隨機(jī)采樣。另外,還可以在樹模型的每個(gè)節(jié)點(diǎn)拆分前進(jìn)行隨機(jī)列抽樣,從中最優(yōu)的分裂特征,對(duì)應(yīng)參數(shù)colsample_bynode,該參數(shù)是每個(gè)節(jié)點(diǎn)進(jìn)行分裂時(shí)的特征采樣率,每次進(jìn)行拆分時(shí),都會(huì)進(jìn)行一次這樣的列采樣。列是從為當(dāng)前層級(jí)選擇的列集中進(jìn)行子采樣的, tree methodexact時(shí)不支持該參數(shù)。這三個(gè)參數(shù)的作用是相乘累積的;[注:列抽樣是隨機(jī)森林中的技術(shù),目的是選擇全部特征的一部分作為節(jié)點(diǎn)分裂屬性的待選集合,可以防止模型的過(guò)擬合]
  • lambdaL2正則化的加權(quán)參數(shù)[注:參見gbtree介紹中[樹的復(fù)雜度定義]的注釋,Lambda對(duì)應(yīng)復(fù)雜度中的的λ值]。取值[0,∞),默認(rèn)值為1,值越大模型越保守;
  • alphaL1正則化的加權(quán)參數(shù)[注:參見gbtree介紹中[樹的復(fù)雜度定義]的注釋,alpha對(duì)應(yīng)復(fù)雜度中的的α值]。取值[0,∞),默認(rèn)值為0,值越大模型越保守。當(dāng)α=0、λ=1時(shí),相當(dāng)于進(jìn)行L2正則化;當(dāng)λ=0、α=1時(shí),相當(dāng)于進(jìn)行L1正則化;
  • tree_methodXGBoost模型中構(gòu)建提升樹的算法。具體指的是樹在分枝時(shí),對(duì)連續(xù)變量(分裂特征)選擇最佳拆分點(diǎn)的算法。auto(同hist,默認(rèn)值),exact(精確的貪心算法,枚舉所有特征上所有可能得拆分點(diǎn)進(jìn)行計(jì)算),approx(近似算法,使用分位數(shù)草圖和梯度直方圖的近似貪婪算法),hist(更快的直方圖優(yōu)化近似貪婪算法);
  • scale_pos_weight:控制陰性和陽(yáng)性樣本的權(quán)重,在類別不平衡時(shí)使用,一個(gè)可以考慮的典型值是陰性樣本總數(shù) / 陽(yáng)性樣本總數(shù);
  • updater:用逗號(hào)分隔的字符串來(lái)定義要運(yùn)行的樹updater的序列,提供了一種構(gòu)建和修改樹的模塊化方式,可以理解為函數(shù)中有一些內(nèi)置的建樹策略插件。這是一個(gè)高級(jí)參數(shù),通常根據(jù)其他一些參數(shù)自動(dòng)設(shè)置??捎眠x項(xiàng)有grow_colmaker,grow_histmakergrow_quantile_histmaker,grow_gpu_hist,grow_gpu_approx,sync,refresh,prune。詳情可參見XGBoost文件;
  • refresh_leafupdaterrefresh的一個(gè)參數(shù)[注:updater指定為refresh表示基于當(dāng)前數(shù)據(jù)刷新樹的統(tǒng)計(jì)信息和/或葉節(jié)點(diǎn)的值,注意不是執(zhí)行數(shù)據(jù)行的隨機(jī)子采樣]。默認(rèn)為1表示將更新葉節(jié)點(diǎn)值和節(jié)點(diǎn)的統(tǒng)計(jì)信息,0僅更新節(jié)點(diǎn)的統(tǒng)計(jì)信息;
  • process_type:指定要執(zhí)行的樹提升過(guò)程類型(創(chuàng)建樹、提升樹)。默認(rèn)創(chuàng)建新樹的正常提升過(guò)程(default),update則表示從現(xiàn)有模型開始僅更新其樹。每次提升迭代中從初始模型中提取一棵樹,為該樹運(yùn)行updater參數(shù)指定的序列,并將修改后的樹添加到新模型中。新模型將具有相同或更少數(shù)量的樹,這取決于執(zhí)行的提升迭代次數(shù)??捎玫膬?nèi)置插件有refresh prune,當(dāng) process_type=update時(shí)不能使用創(chuàng)建新樹的updaters;
  • grow_policy:指定增加新節(jié)點(diǎn)的方式,僅當(dāng)tree_method設(shè)置為histapprox時(shí)可用。默認(rèn)是depthwise,最靠近根節(jié)點(diǎn)處進(jìn)行拆分[注:一個(gè)屬性對(duì)樹的性能度量改進(jìn)越大越靠近根節(jié)點(diǎn)];lossguide在損失函數(shù)變化最大的節(jié)點(diǎn)上進(jìn)行拆分;
  • max_leaves:樹的葉節(jié)點(diǎn)的最多數(shù)量,tree_methodexact時(shí)可用。默認(rèn)為0表示沒有限制;
  • max_bin:連續(xù)變量分拆成離散分箱的最大數(shù)量,默認(rèn)256,僅當(dāng)tree_method設(shè)置為histapprox時(shí)可用[注:貪心算法會(huì)枚舉所有的特征以及其拆分點(diǎn)然后選擇最佳的那個(gè),當(dāng)數(shù)據(jù)比較多時(shí)這種方法的計(jì)算量是非常驚人的。在近似算法中,選定部分候選拆分點(diǎn)來(lái)進(jìn)行枚舉并確定最佳拆分點(diǎn),此時(shí)候選拆分點(diǎn)的選擇成為關(guān)鍵。選取候選拆分點(diǎn)的首要任務(wù)是將樣本分成幾塊(稱為分箱)]
  • num_parallel_tree實(shí)驗(yàn)性參數(shù),在每輪迭代期間構(gòu)建的并行樹的數(shù)量。此選項(xiàng)用于支持增強(qiáng)隨機(jī)森林,默認(rèn)值為1。其值>1意味著基學(xué)習(xí)器不再是一棵樹而是隨機(jī)森林。有助于通過(guò)XGBoost測(cè)試隨機(jī)森林(相應(yīng)參數(shù)設(shè)置為:colsample_bytree<1, subsample < 1 and round=1);
  • monotone_constraints:變量單調(diào)性約束。一個(gè)由1、0-1組成的數(shù)值向量,長(zhǎng)度等于訓(xùn)練數(shù)據(jù)中的特征數(shù)量。1是增加,-1是減少,0沒有約束。詳情可參見XGBoost文件;
  • interaction_constraints:用特征索引的嵌套向量列表來(lái)指定允許交互作用的特征。每個(gè)內(nèi)部列表是允許相互作用的特征的一組索引,如[[0, 1], [2, 3, 4]]表示列索引為01的特征存在交互,列索引為2、34的特征存在交互作用。需要注意,特征索引值應(yīng)該從0開始(0標(biāo)記第一列),不考慮交互項(xiàng)就不要指定指定改參數(shù)。
  • multi_strategy:多分類結(jié)局?jǐn)?shù)據(jù)目前支持Python,此處不介紹。

2.2 gblinear參數(shù)

  • lambdaL2正則化的加權(quán)參數(shù),默認(rèn)值為0,值越大模型越保守;
  • alphaL1正則化的加權(quán)參數(shù),默認(rèn)值為0,值越大模型越保守;

  • updater:擬合線性模型的算法。默認(rèn)是shotgun,基于shotgun算法的平行坐標(biāo)下降算法;coord_descent表示采用普通坐標(biāo)下降算法

  • feature_selector:特征選擇和排序方法??蛇x項(xiàng)有cyclicshuffle,random,greedythrifty;

  • top_k:當(dāng)feature_selector設(shè)置為greedythrifty時(shí),最多選用的特征數(shù)量,默認(rèn)0表示選用所有的特征。

2.3 dart參數(shù)

DARTDropouts Multiple Additive Regression TreesDropout加性回歸樹模型)。

XGBoost結(jié)合了大量的回歸樹和較小的學(xué)習(xí)率,這種情況下,相比后期添加的樹,早期添加的樹更為重要。為解決過(guò)擬合問(wèn)題,使得最終的集成模型中各個(gè)樹的貢獻(xiàn)更加平均一些,DART構(gòu)建新樹時(shí)刪除了一些不重要的普通樹。DART利用了深度神經(jīng)網(wǎng)絡(luò)中Dropout(隨機(jī)失活正則化)技巧,當(dāng)計(jì)算下一棵樹要擬合的負(fù)梯度時(shí),只考慮現(xiàn)有集成樹的一個(gè)隨機(jī)子集(when computing the gradient that the next tree will fit, only a random subset of the existing ensemble is considered),或者說(shuō)從現(xiàn)有的集成樹中隨機(jī)丟棄一部分樹,僅用剩余的一部分樹來(lái)計(jì)算下一棵樹的標(biāo)簽(負(fù)梯度)。當(dāng)將新樹添加到集成模型中時(shí),模型結(jié)果會(huì)超調(diào),因此DART還要執(zhí)行一個(gè)歸一化步驟。

新構(gòu)建的樹以及丟棄的樹都是為了減小當(dāng)前模型與最佳預(yù)測(cè)器之間的差距。這里其實(shí)不太容易理解。Dropout這個(gè)動(dòng)作每次迭代都會(huì)重新進(jìn)行一次,這一輪迭代中沒有使用的樹在下一次迭代中可能又會(huì)被選中,當(dāng)然也可能不會(huì)被選中。每一輪迭代中為計(jì)算下一棵樹的標(biāo)簽而隨機(jī)丟棄的樹跟新生成的樹一樣,其生成都是采用Dropout技術(shù)來(lái)生成的,也都將是最終集成模型的一部分。經(jīng)過(guò)m輪的迭代,集成模型對(duì)個(gè)體i進(jìn)行預(yù)測(cè)時(shí),仍然要使用m棵樹來(lái)進(jìn)行,包括構(gòu)建第m棵樹時(shí)隨機(jī)選擇的樹、隨機(jī)丟棄的樹和第m棵樹。

采用了Dropout技術(shù)的Boosting模型,假設(shè)第m輪訓(xùn)練中有K棵樹被丟棄,則第m棵樹要擬合的標(biāo)簽僅利用了m-1-K棵樹(而不是m-1)來(lái)獲得的,即第m顆樹的構(gòu)造減少的是m-1-K棵樹的集成模型預(yù)測(cè)仍可能存在的誤差。很顯然,相比m-1棵樹的模型(普通的Boosting模型),m-1-K棵樹的模型對(duì)結(jié)局的解釋更小一些,所以第m棵樹的標(biāo)簽值更大一些。作為可加性模型,經(jīng)過(guò)m輪迭代的集成模型有m棵樹,包括被丟棄的K棵樹、被選中用于計(jì)算第m樹標(biāo)簽的m-1-K棵樹以及第m棵樹,這個(gè)包含了m棵樹的集成模型對(duì)結(jié)果的預(yù)測(cè)很明顯是偏大的,這可能就是文獻(xiàn)上說(shuō)的同時(shí)引入新樹和丟棄的樹會(huì)導(dǎo)致模型結(jié)果的超調(diào)(introducing both the new tree and the dropped trees will result in the model overshooting the target),所以when adding the new tree to the ensemble where DART performs a normalization step。怎么歸一化呢?其實(shí)就是引入收縮因子,這就稱作為歸一化:

上述模型釋義:假設(shè)第m輪訓(xùn)練中,有K棵樹被丟棄,表示隨機(jī)選擇的用來(lái)估計(jì)第m棵樹標(biāo)簽的那些樹的集成模型的預(yù)測(cè)結(jié)果,表示被丟棄樹的集成模型的預(yù)測(cè)結(jié)果(被丟棄樹的葉節(jié)點(diǎn)輸出值的加和),表示新樹的葉節(jié)點(diǎn)輸出值,η是學(xué)習(xí)率(見gbtree參數(shù)),b為新樹與丟棄樹的權(quán)重之比,α為修正因子。

目標(biāo)函數(shù)如下:

DART也可以看做是一種正則化,它是通過(guò)丟棄樹的數(shù)量來(lái)控制正則化的大小。特別情況下,如果不丟棄樹則DARTXGBoost沒有什么不同,如果丟棄所有的樹,DART與隨機(jī)森林就沒有區(qū)別了。

  • dart繼承自gbtree提升器,因此支持 gbtree 的所有參數(shù),比如 etagamma、max_depth 。額外的參數(shù)如下:

  • sample_type:采樣算法的類型。uniform(默認(rèn))隨機(jī)丟棄,即等概率選擇要?jiǎng)h除的樹;weighted按權(quán)重比例選擇要丟棄的樹;
  • normalize_type:歸一化算法的類型。tree(默認(rèn))新樹的權(quán)重與每棵丟棄的樹的權(quán)重相同,則α=K/(K+η);forest新樹的權(quán)重與丟棄樹(森林)的權(quán)重之和相同,則α=1/(1+η);
  • rate_drop:丟棄率,當(dāng)前要丟棄的樹占當(dāng)前所有樹的比例。取值范圍[0,1]默認(rèn)為0;
  • one_drop:設(shè)置為true表示dropout期間,至少有一樹總是被丟棄。默認(rèn)為0;
  • skip_drop:不執(zhí)行dropout的概率,取值范圍[0,1],默認(rèn)為0。如果跳過(guò)了dropout,則新樹將和xgboost 相同的方式加入到模型中。

[3]任務(wù)參數(shù)

  • objective指定學(xué)習(xí)任務(wù)和相應(yīng)的目標(biāo)函數(shù)[注:此處的目標(biāo)函數(shù)顯然指定的是目標(biāo)函數(shù)中的傳統(tǒng)損失函數(shù)部分],格式是學(xué)習(xí)任務(wù):目標(biāo)函數(shù),學(xué)習(xí)任務(wù)主要有回歸、分類、排序和生存分析,每類學(xué)習(xí)任務(wù)可能會(huì)有不同的算法,每種算法對(duì)應(yīng)的目標(biāo)函數(shù)又不相同。比如reg:squarederror表示執(zhí)行回歸任務(wù),使用平方損失作為損失函數(shù);而binary:logistic表示執(zhí)行二分類任務(wù),加法模型的輸出的是概率(通過(guò)sigmoid函數(shù)轉(zhuǎn)換而來(lái)) 然后使用交叉熵作為損失函數(shù),但默認(rèn)的驗(yàn)證集評(píng)價(jià)指標(biāo)是負(fù)對(duì)數(shù)似然。其他眾多的內(nèi)置學(xué)習(xí)任務(wù):目標(biāo)函數(shù)可參見xgboost包幫助文件XGBoost文件。除了這些內(nèi)置的目標(biāo)函數(shù),也可以將通過(guò)參數(shù)obj將自定義的函數(shù)傳遞給該參數(shù);
  • base_score所有個(gè)案的初始預(yù)測(cè)得分,用于設(shè)定一個(gè)初始的、全局偏差,默認(rèn)值0.5;

  • eval_metric驗(yàn)證數(shù)據(jù)的評(píng)估指標(biāo),可以使用多個(gè)指標(biāo)[注:幫助文件上的解釋是“evaluation metrics for validation data”,這里的驗(yàn)證數(shù)據(jù)指的是用于評(píng)估模型性能的數(shù)據(jù)集,數(shù)據(jù)集由watchlist指定。這個(gè)指標(biāo)不會(huì)影響到模型的訓(xùn)練,它只是模型訓(xùn)練完成之后用來(lái)評(píng)估模型效果的一個(gè)指標(biāo)]。默認(rèn)值會(huì)根據(jù)目標(biāo)函數(shù)會(huì)自動(dòng)分配(如回歸默認(rèn)rmse,分類默認(rèn)logloss,排序默認(rèn)平均精度均值(mAP)),也可以通過(guò)參數(shù)feval自定義一個(gè)函數(shù)傳遞給它。眾多評(píng)估指標(biāo)可參見xgboost包幫助文件XGBoost文件;

  • seed隨機(jī)種子。R中如果不設(shè)置并不是默認(rèn)為0,而是通過(guò)R自己的RNG engine來(lái)獲?。?/span>

  • seed_per_iteration:通過(guò)迭代器編號(hào)確定種子PRNG。默認(rèn)為false。

data訓(xùn)練集。xgb.train需要是xgb.DMatrix對(duì)象。xgboost可以是xgb.DMatrix對(duì)象,也可以是matrix, dgCMatrix或本地?cái)?shù)據(jù)文件;
nrounds提升輪次(迭代次數(shù))的最大次數(shù),也就是訓(xùn)練期間生成基學(xué)習(xí)器的數(shù)量;
watchlist用于評(píng)估模型性能的DMatrix數(shù)據(jù)集列表。模型在每一次迭代都會(huì)計(jì)算這些數(shù)據(jù)集的評(píng)估指標(biāo),評(píng)估指標(biāo)由參數(shù)eval_metricfeval來(lái)指定。該部分的輸出儲(chǔ)存在結(jié)果對(duì)象中的evaluation_log字段中。[注:watchlistxgb.train函數(shù)的參數(shù),在xgboost函數(shù)中也設(shè)置此參數(shù)結(jié)果會(huì)報(bào)錯(cuò)(Error in check.custom.obj() : Setting objectives in 'params' and 'obj' at the same time is not allowed];
obj:自定義目標(biāo)函數(shù);
feval:自定義評(píng)估函數(shù);
verbose:顯示模型性能的一些信息,0不顯示,1顯示模型性能信息,2額外一些信息;
print_every_nverbose>0時(shí),每n次迭代打印1次模型迭代過(guò)程的性能信息。默認(rèn)值為1表示打印所有消息;
early_stopping_rounds:指定模型性能無(wú)改善的迭代次數(shù),達(dá)到這個(gè)標(biāo)準(zhǔn)則模型將停止訓(xùn)練;如設(shè)置為NULL則不觸發(fā)早期停止功能;
maximize:性能度量的值是否越大越好[注:有些評(píng)估指標(biāo)值越小模型性能越好,比如均方誤差;而有些則越大越好比如AUC]。設(shè)置為TURE則表示該值(驗(yàn)證得分)越大模型性能越好。如果設(shè)置了fevalearly_stopping_rounds,則該參數(shù)必須設(shè)置;
save_period:每幾次迭代就自動(dòng)保存1次模型,0表示最后保存;
save_name:周期性自動(dòng)保存的模型文件名稱或路徑;
xgb_model:先前建立的用來(lái)繼續(xù)訓(xùn)練的模型。xgb.Booster對(duì)象或者其原始數(shù)據(jù),或先前保存的模型名稱;
callbacks:在提升過(guò)程中執(zhí)行各種任務(wù)的回調(diào)函數(shù)列表。有些回調(diào)函數(shù)是根據(jù)參數(shù)值自動(dòng)創(chuàng)建的,用戶也可以提供現(xiàn)有的或他們自己的回調(diào)方法以定制訓(xùn)練過(guò)程;
label:指定結(jié)局變量。數(shù)據(jù)是本地文件或xgb.DMatrix對(duì)象時(shí)無(wú)需提供;
missing:缺失值的指示符,默認(rèn)NA有時(shí)會(huì)用0或者極值來(lái)表示。該參數(shù)僅用于稠密矩陣算法;
weight:指定一個(gè)向量作為每條記錄的權(quán)重。
分類變量的參數(shù)max_cat_to_onehot(是都對(duì)小于指定閾值的變量采用獨(dú)熱編碼)和max_cat_threshold(每次拆分考慮的最大類別數(shù))目前支持Python。

END

@_@

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多