XGBoost

XGBoost

XGBoost(Extreme Gradient Boosting)全名叫極端梯度提升樹鸥拧,XGBoost是集成學(xué)習(xí)方法的王牌,在Kaggle數(shù)據(jù)挖掘比賽中拆宛,大部分獲勝者用了XGBoost浑厚。XGBoost在絕大多數(shù)的回歸和分類問題上表現(xiàn)的十分頂尖

最優(yōu)模型的構(gòu)建方法

我們在前面已經(jīng)知道蔓罚,構(gòu)建最優(yōu)模型的一般方法是最小化訓(xùn)練數(shù)據(jù)的損失函數(shù)。
我們用字母 L表示損失瞻颂,如下式


在這里插入圖片描述

其中豺谈,F(xiàn)是假設(shè)空間假設(shè)空間是在已知屬性和屬性可能取值的情況下,對所有可能滿足目標(biāo)的情況的一種毫無遺漏的假設(shè)集合贡这。式(1.1)稱為經(jīng)驗風(fēng)險最小化茬末,訓(xùn)練得到的模型復(fù)雜度較高。當(dāng)訓(xùn)練數(shù)據(jù)較小時盖矫,模型很容易出現(xiàn)過擬合問題丽惭。
因此,為了降低模型的復(fù)雜度辈双,常采用下式:

在這里插入圖片描述

其中J(f)為模型的復(fù)雜度责掏,式(2.1)稱為結(jié)構(gòu)風(fēng)險最小化,結(jié)構(gòu)風(fēng)險最小化的模型往往對訓(xùn)練數(shù)據(jù)以及未知的測試數(shù)據(jù)都有較好的預(yù)測

應(yīng)用:
  • 決策樹的生成和剪枝分別對應(yīng)了經(jīng)驗風(fēng)險最小化和結(jié)構(gòu)風(fēng)險最小化湃望,
  • XGBoost的決策樹生成是結(jié)構(gòu)風(fēng)險最小化的結(jié)果

XGBoost的目標(biāo)函數(shù)推導(dǎo)

目標(biāo)函數(shù)確定

目標(biāo)函數(shù)换衬,即損失函數(shù),通過最小化損失函數(shù)來構(gòu)建最優(yōu)模型证芭。

由前面可知瞳浦, 損失函數(shù)應(yīng)加上表示模型復(fù)雜度的正則項,且XGBoost對應(yīng)的模型包含了多個CART樹废士,因此叫潦,模型的目標(biāo)函數(shù)為:

'

(3.1)式是正則化的損失函數(shù);中yi是模型的實際輸出結(jié)果官硝,yhati是模型的輸出結(jié)果矗蕊;等式右邊第一部分是模型的訓(xùn)練誤差,第二部分是正則化項氢架,這里的正則化項是K棵樹的正則化項相加而來的傻咖。

CART樹

在這里插入圖片描述

上圖為第K棵CART樹,確定一棵CART樹需要確定兩部分达箍,第一部分就是樹的結(jié)構(gòu)没龙,這個結(jié)構(gòu)將輸入樣本映射到一個確定的葉子節(jié)點上,記為f_k(x) 第二部分就是各個葉子節(jié)點的值,q(x)表示輸出的葉子節(jié)點序號, w_q(x)表示對應(yīng)葉子節(jié)點序號的值硬纤。由定義得:
在這里插入圖片描述

樹的復(fù)雜度定義

  • 定義每課樹的復(fù)雜度
    假設(shè)我們要預(yù)測一家人對電子游戲的喜好程度解滓,考慮到年輕和年老相比,年輕更可能喜歡電子游戲筝家,以及男性和女性相比洼裤,男性更喜歡電子游戲,故先根據(jù)年齡大小區(qū)分小孩和大人溪王,然后再通過性別區(qū)分開是男是女腮鞍,逐一給各人在電子游戲喜好程度上打分,如下圖所示:
    在這里插入圖片描述

    就這樣莹菱,訓(xùn)練出了2棵樹tree1和tree2移国,類似之前gbdt的原理,兩棵樹的結(jié)論累加起來便是最終的結(jié)論道伟,所以:
  • 小男孩的預(yù)測分數(shù)就是兩棵樹中小孩所落到的結(jié)點的分數(shù)相加:2 + 0.9 = 2.9迹缀。
    • 爺爺?shù)念A(yù)測分數(shù)同理:-1 + (-0.9)= -1.9。

具體如下圖所示


在這里插入圖片描述

如下例樹的復(fù)雜度表示:

在這里插入圖片描述

目標(biāo)函數(shù)推導(dǎo)

根據(jù)(3.1)式蜜徽,共進行t次迭代的學(xué)習(xí)模型的目標(biāo)函數(shù)為:


在這里插入圖片描述

由前向分布算法可知祝懂,前t-1棵樹的結(jié)構(gòu)為常數(shù)


在這里插入圖片描述

我們知道,泰勒公式的二階導(dǎo)近似表示:
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

XGBoost的回歸樹構(gòu)建方法

計算分裂節(jié)點

在實際訓(xùn)練過程中拘鞋,當(dāng)建立第 t 棵樹時砚蓬,XGBoost采用貪心法進行樹結(jié)點的分裂:

從樹深為0時開始:對樹中的每個葉子結(jié)點嘗試進行分裂;每次分裂后盆色,原來的一個葉子結(jié)點繼續(xù)分裂為左右兩個子葉子結(jié)點灰蛙,原葉子結(jié)點中的樣本集將根據(jù)該結(jié)點的判斷規(guī)則分散到左右兩個葉子結(jié)點中;新分裂一個結(jié)點后傅事,我們需要檢測這次分裂是否會給損失函數(shù)帶來增益缕允,增益的定義如下:


在這里插入圖片描述

如果增益Gain>0,即分裂為兩個葉子節(jié)點后蹭越,目標(biāo)函數(shù)下降了,那么我們會考慮此次分裂的結(jié)果教届。

那么一直這樣分裂响鹃,什么時候才會停止呢

停止分裂條件判斷

情況一:上節(jié)推導(dǎo)得到的打分函數(shù)是衡量樹結(jié)構(gòu)好壞的標(biāo)準,因此案训,可用打分函數(shù)來選擇最佳切分點买置。首先確定樣本特征的所有切分點,對每一個確定的切分點進行切分强霎,切分好壞的標(biāo)準如下:

在這里插入圖片描述

Gain表示單節(jié)點obj與切分后的兩個節(jié)點的樹obj之差忿项,遍歷所有特征的切分點,找到最大Gain的切分點即是最佳分裂點,根據(jù)這種方法繼續(xù)切分節(jié)點轩触,得到CART樹寞酿。若 \gamma 值設(shè)置的過大,則Gain為負脱柱,表示不切分該節(jié)點伐弹,因為切分后的樹結(jié)構(gòu)變差了。\gamma 值越大榨为,表示對切分后obj下降幅度要求越嚴惨好,這個值可以在XGBoost中設(shè)定。
情況二:當(dāng)樹達到最大深度時随闺,停止建樹日川,因為樹的深度太深容易出現(xiàn)過擬合,這里需要設(shè)置一個超參數(shù)max_depth矩乐。
情況三:當(dāng)引入一次分裂后逗鸣,重新計算新生成的左、右兩個葉子結(jié)點的樣本權(quán)重和绰精。如果任一個葉子結(jié)點的樣本權(quán)重低于某一個閾值撒璧,也會放棄此次分裂。這涉及到一個超參數(shù):最小樣本權(quán)重和笨使,是指如果一個葉子節(jié)點包含的樣本數(shù)量太少也會放棄分裂卿樱,防止樹分的太細,這也是過擬合的一種措施硫椰。

XGBoost與GDBT的區(qū)別

  • 區(qū)別一
  • XGBoost生成CART樹考慮了樹的復(fù)雜度繁调,
  • GDBT未考慮,GDBT在樹的剪枝步驟中考慮了樹的復(fù)雜度靶草。
  • 區(qū)別二
  • XGBoost是擬合上一輪損失函數(shù)的二階導(dǎo)展開
  • GDBT是擬合上一輪損失函數(shù)的一階導(dǎo)展開
  • 因此蹄胰,XGBoost的準確性更高,且滿足相同的訓(xùn)練效果奕翔,需要的迭代次數(shù)更少裕寨。
  • 區(qū)別三
  • XGBoost與GDBT都是逐次迭代來提高模型性能,但是XGBoost在選取最佳切分點時可以開啟多線程進行派继,大大提高了運行速度宾袜。

API

1 . xgboost的安裝:

官網(wǎng)鏈接:https://xgboost.readthedocs.io/en/latest/

pip3 install xgboost

2 . xgboost參數(shù)介紹

xgboost雖然被稱為kaggle比賽神奇,但是驾窟,我們要想訓(xùn)練出不錯的模型庆猫,必須要給參數(shù)傳遞合適的值。

xgboost中封裝了很多參數(shù)绅络,主要由三種類型構(gòu)成:通用參數(shù)(general parameters)月培,Booster 參數(shù)(booster parameters)和學(xué)習(xí)目標(biāo)參數(shù)(task parameters)

  • 通用參數(shù):主要是宏觀函數(shù)控制嘁字;
  • Booster參數(shù):取決于選擇的Booster類型,用于控制每一步的booster(tree, regressiong)杉畜;
  • 學(xué)習(xí)目標(biāo)參數(shù):控制訓(xùn)練目標(biāo)的表現(xiàn)纪蜒。
2.1 通用參數(shù)(general parameters)
  1. booster [缺省值=gbtree]
  2. 決定使用哪個booster,可以是gbtree寻行,gblinear或者dart霍掺。gbtree和dart使用基于樹的模型(dart 主要多了 Dropout),而gblinear 使用線性函數(shù).
  3. silent [缺省值=0]設(shè)置為0打印運行信息拌蜘;設(shè)置為1靜默模式杆烁,不打印
  4. nthread [缺省值=設(shè)置為最大可能的線程數(shù) 并行運行xgboost的線程數(shù),輸入的參數(shù)應(yīng)該<=系統(tǒng)的CPU核心數(shù)简卧,若是沒有設(shè)置算法會檢測將其設(shè)置為CPU的全部核心數(shù)
    下面的兩個參數(shù)不需要設(shè)置兔魂,使用默認的就好了
  • num_pbuffer [xgboost自動設(shè)置,不需要用戶設(shè)置]預(yù)測結(jié)果緩存大小举娩,通常設(shè)置為訓(xùn)練實例的個數(shù)析校。該緩存用于保存最后boosting操作的預(yù)測結(jié)果。
  • num_feature [xgboost自動設(shè)置铜涉,不需要用戶設(shè)置]在boosting中使用特征的維度,設(shè)置為特征的最大維度
2.2 Booster 參數(shù)(booster parameters)
Parameters for Tree Booster
  • eta [缺省值=0.3芙代,別名:learning_rate] 更新中減少的步長來防止過擬合吊奢。在每次boosting之后,可以直接獲得新的特征權(quán)值纹烹,這樣可以使得boosting更加魯棒页滚。范圍: [0,1]

  • gamma [缺省值=0,別名: min_split_loss](分裂最小loss)在節(jié)點分裂時铺呵,只有分裂后損失函數(shù)的值下降了裹驰,才會分裂這個節(jié)點。Gamma指定了節(jié)點分裂所需的最小損失函數(shù)下降值片挂。 這個參數(shù)的值越大幻林,算法越保守。這個參數(shù)的值和損失函數(shù)息息相關(guān)宴卖,所以是需要調(diào)整的滋将。范圍: [0,∞]

  • max_depth [缺省值=6] 這個值為樹的最大深度。 這個值也是用來避免過擬合的症昏。max_depth越大,模型會學(xué)到更具體更局部的樣本父丰。設(shè)置為0代表沒有限制 ,范圍: [0,∞]

  • min_child_weight [缺省值=1]決定最小葉子節(jié)點樣本權(quán)重和肝谭。XGBoost的這個參數(shù)是最小樣本權(quán)重的和.當(dāng)它的值較大時掘宪,可以避免模型學(xué)習(xí)到局部的特殊樣本。 但是如果這個值過高攘烛,會導(dǎo)致欠擬合魏滚。這個參數(shù)需要使用CV來調(diào)整。范圍: [0,∞]

  • subsample [缺省值=1]這個參數(shù)控制對于每棵樹坟漱,隨機采樣的比例鼠次。減小這個參數(shù)的值,算法會更加保守芋齿,避免過擬合腥寇。但是,如果這個值設(shè)置得過小觅捆,它可能會導(dǎo)致欠擬合赦役。典型值:0.5-1,0.5代表平均采樣栅炒,防止過擬合.范圍: (0,1]

  • colsample_bytree [缺省值=1] 用來控制每棵隨機采樣的列數(shù)的占比(每一列是一個特征)掂摔。典型值:0.5-1范圍: (0,1]

  • colsample_bylevel [缺省值=1] 用來控制樹的每一級的每一次分裂,對列數(shù)的采樣的占比赢赊。
    我個人一般不太用這個參數(shù)乙漓,因為subsample參數(shù)和colsample_bytree參數(shù)可以起到相同的作用。但是如果感興趣释移,可以挖掘這個參數(shù)更多的用處叭披。范圍: (0,1]

  • lambda [缺省值=1,別名: reg_lambda]權(quán)重的L2正則化項(和Ridge regression類似)秀鞭。
    這個參數(shù)是用來控制XGBoost的正則化部分的趋观。雖然大部分數(shù)據(jù)科學(xué)家很少用到這個參數(shù),但是這個參數(shù)
    在減少過擬合上還是可以挖掘出更多用處的锋边。.

  • alpha [缺省值=0皱坛,別名: reg_alpha]權(quán)重的L1正則化項。(和Lasso regression類似)豆巨。 可以應(yīng)用在很高維度的情況下剩辟,使得算法的速度更快。

  • scale_pos_weight[缺省值=1] 在各類別樣本十分不平衡時往扔,把這個參數(shù)設(shè)定為一個正值贩猎,可以使算法更快收斂。通称继牛可以將其設(shè)置為負 樣本的數(shù)目與正樣本數(shù)目的比值吭服。

Parameters for Linear Booster
  • linear booster一般很少用到。

  • lambda [缺省值=0蝗罗,別稱: reg_lambda]
    L2正則化懲罰系數(shù)艇棕,增加該值會使得模型更加保守蝌戒。

  • alpha [缺省值=0,別稱: reg_alpha]
    L1正則化懲罰系數(shù)沼琉,增加該值會使得模型更加保守北苟。

  • lambda_bias [缺省值=0,別稱: reg_lambda_bias]
    偏置上的L2正則化(沒有在L1上加偏置打瘪,因為并不重要)

學(xué)習(xí)目標(biāo)參數(shù)(task parameters)
  • objective [缺省值=reg:linear]
    “reg:linear” – 線性回歸
    “reg:logistic” – 邏輯回歸
    “binary:logistic” – 二分類邏輯回歸友鼻,輸出為概率
    “multi:softmax” – 使用softmax的多分類器,返回預(yù)測的類別(不是概率)闺骚。在這種情況下彩扔,你還需要多設(shè)一個參數(shù):num_class(類別數(shù)目)
    “multi:softprob” – 和multi:softmax參數(shù)一樣,但是返回的是每個數(shù)據(jù)屬于各個類別的概率葛碧。

  • eval_metric [缺省值=通過目標(biāo)函數(shù)選擇]
    可供選擇的如下所示:
    “rmse”: 均方根誤差
    “mae”: 平均絕對值誤差
    “l(fā)ogloss”: 負對數(shù)似然函數(shù)值
    “error”: 二分類錯誤率借杰。
    其值通過錯誤分類數(shù)目與全部分類數(shù)目比值得到。對于預(yù)測进泼,預(yù)測值大于0.5被認為是正類蔗衡,其它歸為負類。
    “error@t”: 不同的劃分閾值可以通過 ‘t’進行設(shè)置
    “merror”: 多分類錯誤率乳绕,計算公式為(wrong cases)/(all cases)
    “mlogloss”: 多分類log損失
    “auc”: 曲線下的面積

  • seed [缺省值=0]
    隨機數(shù)的種子 ,設(shè)置它可以復(fù)現(xiàn)隨機數(shù)據(jù)的結(jié)果绞惦,也可以用于調(diào)整參數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洋措,隨后出現(xiàn)的幾起案子济蝉,更是在濱河造成了極大的恐慌,老刑警劉巖菠发,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件王滤,死亡現(xiàn)場離奇詭異,居然都是意外死亡滓鸠,警方通過查閱死者的電腦和手機雁乡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糜俗,“玉大人踱稍,你說我怎么就攤上這事∮颇ǎ” “怎么了珠月?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楔敌。 經(jīng)常有香客問我啤挎,道長,這世上最難降的妖魔是什么卵凑? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任侵浸,我火速辦了婚禮旺韭,結(jié)果婚禮上氛谜,老公的妹妹穿的比我還像新娘掏觉。我一直安慰自己,他們只是感情好值漫,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布澳腹。 她就那樣靜靜地躺著,像睡著了一般杨何。 火紅的嫁衣襯著肌膚如雪酱塔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天危虱,我揣著相機與錄音羊娃,去河邊找鬼。 笑死埃跷,一個胖子當(dāng)著我的面吹牛蕊玷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弥雹,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼垃帅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剪勿?” 一聲冷哼從身側(cè)響起贸诚,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厕吉,沒想到半個月后酱固,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡头朱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年运悲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片髓窜。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扇苞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寄纵,到底是詐尸還是另有隱情鳖敷,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布程拭,位于F島的核電站定踱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恃鞋。R本人自食惡果不足惜崖媚,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一亦歉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畅哑,春花似錦肴楷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泥张,卻和暖如春呵恢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媚创。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工渗钉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钞钙。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓鳄橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歇竟。 傳聞我的和親對象是個殘疾皇子挥唠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容