高效機(jī)器學(xué)習(xí)算法——GBDT

GBDT(Gradient Boosting Decision Tree 梯度提升決策樹(shù))算法近年十分流行,被廣泛應(yīng)用于各類(lèi)數(shù)據(jù)挖掘以及機(jī)器學(xué)習(xí)的比賽之中并有著良好的表現(xiàn)庇麦。下面讓我們來(lái)走進(jìn)這個(gè)算法喜德。

起源

提起GBDT的起源山橄,我們不得不引出以下幾個(gè)概念住诸。

集成學(xué)習(xí)

引用百科中的一段話:

集成學(xué)習(xí)是使用一系列學(xué)習(xí)器進(jìn)行學(xué)習(xí)涣澡,并使用某種規(guī)則把各個(gè)學(xué)習(xí)結(jié)果進(jìn)行整合從而獲得比單個(gè)學(xué)習(xí)器更好的學(xué)習(xí)效果的一種機(jī)器學(xué)習(xí)方法丧诺。一般情況下,集成學(xué)習(xí)中的多個(gè)學(xué)習(xí)器都是同質(zhì)的"弱學(xué)習(xí)器"驳阎。

所謂“同質(zhì)”,是指集成中只包含同種類(lèi)型的個(gè)體學(xué)習(xí)器呵晚。所謂“弱學(xué)習(xí)器”,是指泛化性能略?xún)?yōu)于隨機(jī)猜測(cè)的學(xué)習(xí)器饵隙,例如在二分類(lèi)問(wèn)題上精度略高于50%的分類(lèi)器。換句話說(shuō)芯急,弱學(xué)習(xí)器的結(jié)果接近于靠猜驶俊。
集成學(xué)習(xí)通過(guò)將多個(gè)學(xué)習(xí)器進(jìn)行結(jié)合娶耍,通潮穑可以獲得比單一學(xué)習(xí)器顯著優(yōu)越的泛化性能,這對(duì)弱學(xué)習(xí)器尤明顯想鹰。如何結(jié)合個(gè)體學(xué)習(xí)器,就是集成學(xué)習(xí)研究的核心。目前的集成學(xué)習(xí)方法大致可分為兩大類(lèi):1)個(gè)體學(xué)習(xí)器間存在強(qiáng)依賴(lài)關(guān)系刚陡、必須串行生成的序列化方法,代表是Boosting蝙云;2)個(gè)體學(xué)習(xí)器間不存在強(qiáng)依賴(lài)關(guān)系路召、可同時(shí)生成的并行化方法,代表是Bagging和隨機(jī)森林(Random Forest)身隐。

Boosting

Boosting是一族可將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的算法贾铝。
Boosting算法原理:

  • 先對(duì)N個(gè)訓(xùn)練樣本S1的學(xué)習(xí)得到一個(gè)基分類(lèi)器M1;
  • 將S1中分錯(cuò)的樣本和其他新的數(shù)據(jù)一起構(gòu)成新的N個(gè)訓(xùn)練樣本S2玖绿,再得到一個(gè)基分類(lèi)器M2斑匪;
  • 將S1和S2中都分錯(cuò)的樣本和其他新的數(shù)據(jù)一起構(gòu)成新的N個(gè)訓(xùn)練樣本S3蚀瘸,再得到一個(gè)基分類(lèi)器M3宙刘;
  • 以此類(lèi)推悬包,直至基學(xué)習(xí)器數(shù)達(dá)到事先指定的值T,最終將所有基學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合垫释。

簡(jiǎn)單來(lái)說(shuō)棵譬,就是基于同一訓(xùn)練集和同一個(gè)算法訓(xùn)練出T個(gè)基學(xué)習(xí)器订咸,每一輪訓(xùn)練都針對(duì)上一輪的訓(xùn)練結(jié)果調(diào)整樣本分布酬诀。


Boosting族算法最著名的代表是AdaBoost瞒御。

Bagging

Bagging是Bootstrap AGGregatING的縮寫(xiě),基于自助采樣法(bootstrap sampling)(一種有放回的抽樣方法涌乳,即可能抽到重復(fù)的樣本)。
Bagging算法原理:

  • 使用自助采樣法采樣出T個(gè)含有m個(gè)訓(xùn)練樣本的采樣集带欢,然后基于每個(gè)采樣集訓(xùn)練出一個(gè)基學(xué)習(xí)器乔煞,再將這些基本學(xué)習(xí)器進(jìn)行結(jié)合。
  • 在對(duì)預(yù)測(cè)輸出進(jìn)行結(jié)合時(shí)逗宜,Bagging通常對(duì)分了任務(wù)使用簡(jiǎn)單投票法纺讲,對(duì)回歸任務(wù)使用簡(jiǎn)單平均法囤屹。

Gradient Boosting

Gradient Boosting是一種Boosting的方法肋坚,它主要的思想是,每一次建立模型是在之前建立模型損失函數(shù)的梯度下降方向诲泌。損失函數(shù)是評(píng)價(jià)模型性能(一般為擬合程度+正則項(xiàng))敷扫,認(rèn)為損失函數(shù)越小葵第,性能越好合溺。而讓損失函數(shù)持續(xù)下降,就能使得模型不斷改性提升性能,其最好的方法就是使損失函數(shù)沿著梯度方向下降将硝。Gradient Boost是一個(gè)框架,里面可以套入很多不同的算法痰腮。

GBDT應(yīng)用

分類(lèi)

from sklearn import ensemble
clf = ensemble.GradientBoostingClassifier()
gbdt_model = clf.fit(X_train, y_train)  # Training model
predicty_x = gbdt_model.predict_proba(test_x)[:, 1]  # predict: probablity of 1
# 包含的參數(shù)
# loss = loss, learning_rate = learning_rate, n_estimators = n_estimators,
# min_samples_split = min_samples_split,
# min_samples_leaf = min_samples_leaf,
# min_weight_fraction_leaf = min_weight_fraction_leaf,
# max_depth = max_depth, init = init, subsample = subsample,
# max_features = max_features,
# random_state = random_state, verbose = verbose,
# max_leaf_nodes = max_leaf_nodes, warm_start = warm_start,
# presort = presort  

回歸

from sklearn import ensemble
clf = ensemble.GradientBoostingRegressor()
gbdt_model = clf.fit(X_train, y_train)  # Training model
y_upper = gbdt_model.predict(x_test)  # predict  

構(gòu)建新特征

思想:GBDT每棵樹(shù)的路徑直接作為L(zhǎng)R輸入特征使用膀值。
用已有特征訓(xùn)練GBDT模型沧踏,然后利用GBDT模型學(xué)習(xí)到的樹(shù)來(lái)構(gòu)造新特征,最后把這些新特征加入原有特征一起訓(xùn)練模型翘狱。構(gòu)造的新特征向量是取值0/1的潦匈,向量的每個(gè)元素對(duì)應(yīng)于GBDT模型中樹(shù)的葉子結(jié)點(diǎn)。當(dāng)一個(gè)樣本點(diǎn)通過(guò)某棵樹(shù)最終落在這棵樹(shù)的一個(gè)葉子結(jié)點(diǎn)上赤惊,那么在新特征向量中這個(gè)葉子結(jié)點(diǎn)對(duì)應(yīng)的元素值為1未舟,而這棵樹(shù)的其他葉子結(jié)點(diǎn)對(duì)應(yīng)的元素值為0寡夹。新特征向量的長(zhǎng)度等于GBDT模型里所有樹(shù)包含的葉子結(jié)點(diǎn)數(shù)之和菩掏。

# 弱分類(lèi)器的數(shù)目
n_estimator = 10
# 隨機(jī)生成分類(lèi)數(shù)據(jù)智绸。
X, y = make_classification(n_samples=80000)  
# 切分為測(cè)試集和訓(xùn)練集,比例0.5
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)
# 將訓(xùn)練集切分為兩部分斯稳,一部分用于訓(xùn)練GBDT模型挣惰,另一部分輸入到訓(xùn)練好的GBDT模型生成GBDT特征,然后作為L(zhǎng)R的特征珍语。這樣分成兩部分是為了防止過(guò)擬合竖幔。
X_train, X_train_lr, y_train, y_train_lr = train_test_split(X_train, y_train, test_size=0.5)
# 調(diào)用GBDT分類(lèi)模型拳氢。
grd = GradientBoostingClassifier(n_estimators=n_estimator)
# 調(diào)用one-hot編碼。
grd_enc = OneHotEncoder()
# 調(diào)用LR分類(lèi)模型放接。
grd_lm = LogisticRegression()


# 使用X_train訓(xùn)練GBDT模型透乾,后面用此模型構(gòu)造特征
grd.fit(X_train, y_train)

# fit one-hot編碼器
grd_enc.fit(grd.apply(X_train)[:, :, 0])

# 使用訓(xùn)練好的GBDT模型構(gòu)建特征磕秤,然后將特征經(jīng)過(guò)one-hot編碼作為新的特征輸入到LR模型訓(xùn)練市咆。

grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr)
# 用訓(xùn)練好的LR模型多X_test做預(yù)測(cè)
y_pred_grd_lm = grd_lm.predict_proba(grd_enc.transform(grd.apply(X_test)[:, :, 0]))[:, 1]
# 根據(jù)預(yù)測(cè)結(jié)果輸出
fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred_grd_lm)  
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒙兰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子采缚,更是在濱河造成了極大的恐慌扳抽,老刑警劉巖殖侵,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楞陷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡固蛾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)昌犹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)览芳,“玉大人沧竟,你說(shuō)我怎么就攤上這事悟泵∩了” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵朽肥,是天一觀的道長(zhǎng)衡招。 經(jīng)常有香客問(wèn)我每强,道長(zhǎng)空执,這世上最難降的妖魔是什么辨绊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任邢羔,我火速辦了婚禮,結(jié)果婚禮上框冀,老公的妹妹穿的比我還像新娘明也。我一直安慰自己,他們只是感情好绣硝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鹉胖。 她就那樣靜靜地躺著甫菠,像睡著了一般冕屯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痰洒,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天丘喻,我揣著相機(jī)與錄音仓犬,去河邊找鬼搀继。 笑死叽躯,一個(gè)胖子當(dāng)著我的面吹牛肌括,可吹牛的內(nèi)容都是我干的谍夭。 我是一名探鬼主播紧索,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼珠漂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晚缩!你這毒婦竟也來(lái)了尾膊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荞彼,失蹤者是張志新(化名)和其女友劉穎冈敛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸣皂,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抓谴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寞缝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齐邦。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖第租,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情我纪,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布术健,位于F島的核電站咳促,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冲茸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一祭陷、第九天 我趴在偏房一處隱蔽的房頂上張望醇蝴。 院中可真熱鬧,春花似錦惭适、人聲如沸框产。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)隔崎。三九已至埂息,卻和暖如春享幽,著一層夾襖步出監(jiān)牢的瞬間值桩,已是汗流浹背携栋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疏橄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 1.聽(tīng)婆婆說(shuō)她年輕時(shí)很漂亮,一頭烏黑的頭發(fā),扎了兩根又粗又長(zhǎng)的辮子赊淑,皮膚白皙,能歌,會(huì)舞,那時(shí)有好多男孩追她呢泥畅!婆...
    _紫霞閱讀 1,371評(píng)論 0 1
  • 堅(jiān)持寫(xiě)作已經(jīng)兩周了,這真是世界上最簡(jiǎn)單琳疏、也是最難的一件事揽趾。 我并沒(méi)有完成每一天的任務(wù)奔缠,相反腰奋,可能是完美主義的作祟局冰,...
    Maggie強(qiáng)君閱讀 315評(píng)論 3 3
  • 來(lái)到拉斯維加斯,除了賭場(chǎng)以外毕匀,最不能錯(cuò)過(guò)的就是它的各種表演秀皂岔,而其中的“O”秀以其精湛的表演藝術(shù)博得了觀眾的喜愛(ài),...
    午后窗臺(tái)的貓閱讀 608評(píng)論 0 1
  • 我和Maositan相識(shí)在2014年8月25日下午17:00活玲,是的谍婉,那是個(gè)明媚的夏天唤蔗,我和你相遇了,從那以后藏雏,你成...
    2chase閱讀 295評(píng)論 1 2