集成學(xué)習(xí)(8) - Bagging的原理與實(shí)現(xiàn)

0. 題首

由于sklearn是python機(jī)器學(xué)習(xí)中最重要的庫(kù)隐岛,幾乎封裝了所有常見(jiàn)的機(jī)器學(xué)習(xí)算法区匠,因而這個(gè)庫(kù)內(nèi)容非常多入宦。在學(xué)習(xí)有時(shí)候會(huì)有一種“不知廬山真面目九巡,只緣身在此山中”的感覺(jué)图贸。這個(gè)時(shí)候我們需要跳出現(xiàn)在學(xué)習(xí)的框架,站在更高的高度來(lái)俯視就可以獲得全貌了冕广。
比如這次的bagging算法疏日,和上一次的投票法Votting一樣,都是集成在sklearn的ensemble模塊中撒汉,這個(gè)時(shí)候我們打開(kāi)sklearn的官方文檔沟优,可以一窺ensemble模塊的全貌。如下:


1.JPG

可以看到sklearn.ensemble模塊下封裝了好多集成算法睬辐。除了我們之前學(xué)習(xí)的Voting和本期的Bagging意以外挠阁,常用的還有Adaboost、 GBDT溯饵、RandomForest等侵俗。通過(guò)這種一覽全貌的做法,我們也可以熟悉那個(gè)方法封裝在那個(gè)模塊下面瓣喊。因?yàn)閟klearn的設(shè)計(jì)全面而博大精深坡慌,在使用的時(shí)候經(jīng)常會(huì)遇到忘記某個(gè)模塊的具體位置。

1. Bagging原理概述

Bagging是Bootstrap Aggregation的縮寫(xiě)藻三,常翻譯為裝袋法洪橘。因而要了解bagging,先從Bootstrap說(shuō)起棵帽。Bootstrap熄求,即pull up by your own bootstraps,意思就是白手起家逗概,自立更生的意思弟晚,因而bootstrap可以引申為自助采樣法,它是一種有放回的抽樣方法逾苫,目的為了得到統(tǒng)計(jì)量的分布以及置信區(qū)間卿城,其算法過(guò)程如下:

A)從原始樣本集中抽取訓(xùn)練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個(gè)訓(xùn)練樣本(在訓(xùn)練集中铅搓,有些樣本可能被多次抽取到瑟押,而有些樣本可能一次都沒(méi)有被抽中)。共進(jìn)行k輪抽取星掰,得到k個(gè)訓(xùn)練集多望。(k個(gè)訓(xùn)練集之間是相互獨(dú)立的)

B)每次使用一個(gè)訓(xùn)練集得到一個(gè)模型嫩舟,k個(gè)訓(xùn)練集共得到k個(gè)模型。(注:這里并沒(méi)有具體的分類(lèi)算法或回歸方法怀偷,我們可以根據(jù)具體問(wèn)題采用不同的分類(lèi)或回歸方法家厌,如決策樹(shù)、感知器等)

C)對(duì)分類(lèi)問(wèn)題:將上步得到的k個(gè)模型采用投票的方式得到分類(lèi)結(jié)果椎工;對(duì)回歸問(wèn)題饭于,計(jì)算上述模型的均值作為最后的結(jié)果。(所有模型的重要性相同)

使用流程圖更加直觀:


image.png

bagging的集合策略也比較簡(jiǎn)單晋渺,對(duì)于分類(lèi)問(wèn)題镰绎,通常使用簡(jiǎn)單投票法脓斩,得到最多票數(shù)的類(lèi)別或者類(lèi)別之一為最終的模型輸出木西。對(duì)于回歸問(wèn)題,通常使用簡(jiǎn)單平均法随静,對(duì)T個(gè)弱學(xué)習(xí)器得到的回歸結(jié)果進(jìn)行算術(shù)平均得到最終的模型輸出八千。

由于Bagging算法每次都進(jìn)行采樣來(lái)訓(xùn)練模型,因此泛化能力很強(qiáng)燎猛,對(duì)于降低模型的方差很有作用恋捆。當(dāng)然對(duì)于訓(xùn)練集的擬合程度就會(huì)差一些,也就是模型的偏倚會(huì)大一些重绷。

2. 實(shí)例分析

Sklearn為我們提供了
[BaggingRegressor]與 [BaggingClassifier]
兩種Bagging方法的API沸停,我們?cè)谶@里通過(guò)一個(gè)完整的例子演示Bagging在分類(lèi)問(wèn)題上的具體應(yīng)用。這里兩種方法的默認(rèn)基模型是樹(shù)模型昭卓。

# evaluate bagging algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier

我們創(chuàng)建一個(gè)含有1000個(gè)樣本20維特征的隨機(jī)分類(lèi)數(shù)據(jù)集:

# test classification dataset
from sklearn.datasets import make_classification
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=5)
# summarize the dataset
print(X.shape, y.shape)
>>>
(1000, 20) (1000,)

我們將使用重復(fù)的分層k-fold交叉驗(yàn)證來(lái)評(píng)估該模型愤钾,一共重復(fù)3次,
每次有10個(gè)fold候醒。我們將評(píng)估該模型在所有重復(fù)交叉驗(yàn)證中性能的平均值和標(biāo)準(zhǔn)差能颁。

# evaluate bagging algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=5)
# define the model
model = BaggingClassifier()
# evaluate the model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
>>>
Accuracy: 0.867 (0.034)

最終模型的效果是Accuracy: 0.867 標(biāo)準(zhǔn)差0.034

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市倒淫,隨后出現(xiàn)的幾起案子伙菊,更是在濱河造成了極大的恐慌,老刑警劉巖敌土,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镜硕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡返干,警方通過(guò)查閱死者的電腦和手機(jī)兴枯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)犬金,“玉大人念恍,你說(shuō)我怎么就攤上這事六剥。” “怎么了峰伙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵疗疟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我瞳氓,道長(zhǎng)策彤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任匣摘,我火速辦了婚禮店诗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘音榜。我一直安慰自己庞瘸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布赠叼。 她就那樣靜靜地躺著擦囊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘴办。 梳的紋絲不亂的頭發(fā)上瞬场,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音涧郊,去河邊找鬼贯被。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妆艘,可吹牛的內(nèi)容都是我干的彤灶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼双仍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼枢希!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起朱沃,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苞轿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逗物,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搬卒,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年翎卓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了契邀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡失暴,死狀恐怖坯门,靈堂內(nèi)的尸體忽然破棺而出微饥,到底是詐尸還是另有隱情,我是刑警寧澤古戴,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布欠橘,位于F島的核電站,受9級(jí)特大地震影響现恼,放射性物質(zhì)發(fā)生泄漏肃续。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一叉袍、第九天 我趴在偏房一處隱蔽的房頂上張望始锚。 院中可真熱鬧,春花似錦喳逛、人聲如沸瞧捌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)察郁。三九已至衍慎,卻和暖如春转唉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稳捆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工赠法, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乔夯。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓砖织,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親末荐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侧纯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友甲脏。感恩相遇眶熬!感恩不離不棄。 中午開(kāi)了第一次的黨會(huì)块请,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,551評(píng)論 0 11
  • 彩排完娜氏,天已黑
    劉凱書(shū)法閱讀 4,187評(píng)論 1 3
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒墩新。表情可以傳達(dá)很多信息贸弥。高興了當(dāng)然就笑了,難過(guò)就哭了海渊。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,164評(píng)論 2 7