




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法集成學(xué)習(xí)第7章
在機(jī)器學(xué)習(xí)中,利用各模型之間的差異性來(lái)構(gòu)建比采用單個(gè)模型更好的模型,其目標(biāo)是為了提出一個(gè)在性能上具有一定競(jìng)爭(zhēng)力并且還比較穩(wěn)定的預(yù)測(cè)算法,但是在現(xiàn)實(shí)中往往不會(huì)如愿,反而會(huì)得到多個(gè)各具特色的分類(lèi)器,為了集成這些分類(lèi)器的優(yōu)點(diǎn),集成算法被提出。
集成算法是一種通過(guò)構(gòu)建和結(jié)合多個(gè)學(xué)習(xí)器以完成學(xué)習(xí)任務(wù)的算法,當(dāng)前主流的集成算法分為兩種:第一種為Bagging算法,該算法訓(xùn)練多個(gè)分類(lèi)器,這些分類(lèi)器之間相互獨(dú)立,不存在強(qiáng)依賴(lài)關(guān)系,在訓(xùn)練過(guò)后,利用集成策略將各個(gè)分類(lèi)器最終結(jié)果進(jìn)行集成,以得到最終的結(jié)果;第二種為Boosting算法,該算法是一種將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的算法,需要利用上一個(gè)分類(lèi)器的結(jié)果對(duì)下一個(gè)分類(lèi)器性能做調(diào)整訓(xùn)練,以達(dá)到增強(qiáng)學(xué)習(xí)器的目的。集成學(xué)習(xí)第7章集成學(xué)習(xí)(ensemblelearning)也稱(chēng)多分類(lèi)器系統(tǒng)或基于委員會(huì)的學(xué)習(xí),它是將多個(gè)基礎(chǔ)學(xué)習(xí)器(也稱(chēng)個(gè)體學(xué)習(xí)器)通過(guò)結(jié)合策略進(jìn)行結(jié)合,形成一個(gè)性能優(yōu)良的集成學(xué)習(xí)器來(lái)完成學(xué)習(xí)任務(wù)的一種方法,如圖1所示。在集成學(xué)習(xí)中,個(gè)體學(xué)習(xí)器一般由一個(gè)現(xiàn)有的學(xué)習(xí)算法(如C4.5決策樹(shù)算法)從訓(xùn)練數(shù)據(jù)中訓(xùn)練得到。圖1集成學(xué)習(xí)的一般結(jié)構(gòu)1.集成學(xué)習(xí)的原理分析7.1.1集成學(xué)習(xí)的概念集成學(xué)習(xí)第7章在訓(xùn)練集成學(xué)習(xí)模型時(shí):如果所有個(gè)體學(xué)習(xí)器都是同類(lèi)模型(如集成學(xué)習(xí)模型中每個(gè)個(gè)體學(xué)習(xí)器都是決策樹(shù)模型),則由這些同類(lèi)個(gè)體學(xué)習(xí)器相結(jié)合產(chǎn)生的集成學(xué)習(xí)模型稱(chēng)為同質(zhì)集成模型,同質(zhì)集成模型中的個(gè)體學(xué)習(xí)器亦稱(chēng)“基學(xué)習(xí)器”,相應(yīng)的學(xué)習(xí)算法稱(chēng)為“基學(xué)習(xí)算法”如果個(gè)體學(xué)習(xí)器不是同類(lèi)模型(如集成學(xué)習(xí)模型中同時(shí)包含決策樹(shù)分類(lèi)模型和k近鄰分類(lèi)模型),則由這些不同類(lèi)別的個(gè)體學(xué)習(xí)器相結(jié)合產(chǎn)生的集成學(xué)習(xí)模型稱(chēng)為異質(zhì)集成模型,異質(zhì)集成模型中的個(gè)體學(xué)習(xí)器常稱(chēng)為“組件學(xué)習(xí)器”。1.集成學(xué)習(xí)的原理分析5表7-4集成學(xué)習(xí)模型性能不變學(xué)習(xí)器測(cè)試樣本1測(cè)試樣本2測(cè)試樣本3模型預(yù)測(cè)準(zhǔn)確率個(gè)體學(xué)習(xí)器1√√×66.6%個(gè)體學(xué)習(xí)器2√√×66.6%個(gè)體學(xué)習(xí)器3√√×66.6%集成學(xué)習(xí)器√√×66.6%2.個(gè)體學(xué)習(xí)器對(duì)集成學(xué)習(xí)模型性能的影響表7-3集成學(xué)習(xí)模型性能降低學(xué)習(xí)器測(cè)試樣本1測(cè)試樣本2測(cè)試樣本3模型預(yù)測(cè)準(zhǔn)確率個(gè)體學(xué)習(xí)器1√××33.3%個(gè)體學(xué)習(xí)器2×√×33.3%個(gè)體學(xué)習(xí)器3××√33.3%集成學(xué)習(xí)器×××0表7-2集成學(xué)習(xí)模型性能提升學(xué)習(xí)器測(cè)試樣本1測(cè)試樣本2測(cè)試樣本3模型預(yù)測(cè)準(zhǔn)確率個(gè)體學(xué)習(xí)器1√√×66.6%個(gè)體學(xué)習(xí)器2×√√66.6%個(gè)體學(xué)習(xí)器3√×√66.6%集成學(xué)習(xí)器√√√100%集成學(xué)習(xí)是通過(guò)一定的結(jié)合策略將多個(gè)個(gè)體學(xué)習(xí)器進(jìn)行結(jié)合得到的模型。模型的性能會(huì)受到個(gè)體學(xué)習(xí)器的預(yù)測(cè)準(zhǔn)確率、多樣性和數(shù)量等因素的影響。(1)個(gè)體學(xué)習(xí)器的預(yù)測(cè)準(zhǔn)確率與多樣性對(duì)集成學(xué)習(xí)模型性能的影響。例如,在二分類(lèi)任務(wù)中,如果3個(gè)不同的個(gè)體學(xué)習(xí)器在3個(gè)測(cè)試樣本中的預(yù)測(cè)準(zhǔn)確率都是66.6%,則集成學(xué)習(xí)模型的預(yù)測(cè)準(zhǔn)確率可能能夠達(dá)到100%,即集成學(xué)習(xí)模型的性能有所提升,如表7-2所示(√表示樣本預(yù)測(cè)正確,×表示樣本預(yù)測(cè)錯(cuò)誤);如果3個(gè)不同的個(gè)體學(xué)習(xí)器在3個(gè)測(cè)試樣本中的預(yù)測(cè)準(zhǔn)確率都是33.3%,則集成學(xué)習(xí)模型的預(yù)測(cè)準(zhǔn)確率可能為0,即集成學(xué)習(xí)模型的性能有所降低,如表7-3所示;如果3個(gè)個(gè)體學(xué)習(xí)器是3個(gè)相同的學(xué)習(xí)器,則集成學(xué)習(xí)模型的性能不會(huì)發(fā)生變化,如表7-4所示。集成學(xué)習(xí)第7章集成學(xué)習(xí)第7章可見(jiàn),要獲得好的集成學(xué)習(xí)模型,個(gè)體學(xué)習(xí)器應(yīng)“好而不同”,即個(gè)體學(xué)習(xí)器要有一定的預(yù)測(cè)準(zhǔn)確率(一般個(gè)體學(xué)習(xí)器的預(yù)測(cè)準(zhǔn)確率應(yīng)大于60%),并且各個(gè)個(gè)體學(xué)習(xí)器之間要有差異(多樣性)。2.個(gè)體學(xué)習(xí)器對(duì)集成學(xué)習(xí)模型性能的影響(1)個(gè)體學(xué)習(xí)器的預(yù)測(cè)準(zhǔn)確率與多樣性對(duì)集成學(xué)習(xí)模型性能的影響。集成學(xué)習(xí)第7章例如,在二分類(lèi)任務(wù)中,假設(shè)個(gè)體學(xué)習(xí)器的預(yù)測(cè)誤差率相互獨(dú)立,則集成學(xué)習(xí)模型的預(yù)測(cè)誤差率為其中,T表示個(gè)體學(xué)習(xí)器的數(shù)量,表示個(gè)體學(xué)習(xí)器的預(yù)測(cè)誤差率。可見(jiàn),隨著集成學(xué)習(xí)模型中個(gè)體學(xué)習(xí)器數(shù)目T的增大,集成學(xué)習(xí)模型的預(yù)測(cè)誤差率將呈指數(shù)級(jí)下降,最終趨向于零。然而,這個(gè)結(jié)論是基于假設(shè)“個(gè)體學(xué)習(xí)器的誤差相互獨(dú)立”得到的。在現(xiàn)實(shí)任務(wù)中,個(gè)體學(xué)習(xí)器是為解決同一問(wèn)題而訓(xùn)練出來(lái)的,顯然它們不可能相互獨(dú)立。事實(shí)上,個(gè)體學(xué)習(xí)器的“準(zhǔn)確性”和“多樣性”本身就存在沖突,一般準(zhǔn)確性較高之后,要增加多樣性就必須犧牲準(zhǔn)確性。所以說(shuō),如何訓(xùn)練出“好而不同”的個(gè)體學(xué)習(xí)器,是集成學(xué)習(xí)研究的核心內(nèi)容。2.個(gè)體學(xué)習(xí)器對(duì)集成學(xué)習(xí)模型性能的影響(2)個(gè)體學(xué)習(xí)器的數(shù)量對(duì)集成學(xué)習(xí)模型性能的影響。集成學(xué)習(xí)第7章、3集成學(xué)習(xí)的結(jié)合策略當(dāng)模型的預(yù)測(cè)結(jié)果是數(shù)值型數(shù)據(jù)時(shí),最常用的結(jié)合策略是平均法,即模型的預(yù)測(cè)結(jié)果是每個(gè)個(gè)體學(xué)習(xí)器預(yù)測(cè)結(jié)果的平均值,平均法包含簡(jiǎn)單平均法和加權(quán)平均法兩種。假設(shè)集成學(xué)習(xí)模型中包含T個(gè)個(gè)體學(xué)習(xí)器,其中,個(gè)體學(xué)習(xí)器對(duì)樣本x的預(yù)測(cè)值表示為,則簡(jiǎn)單平均法的計(jì)算公式為加權(quán)平均法的計(jì)算公式為(1).平均法集成學(xué)習(xí)第7章加權(quán)平均法的權(quán)重一般是從訓(xùn)練集中學(xué)習(xí)得到的?,F(xiàn)實(shí)任務(wù)中的訓(xùn)練樣本通常不充分或存在噪聲,這使得模型從訓(xùn)練集中學(xué)習(xí)得到的權(quán)重并不完全可靠,尤其對(duì)規(guī)模較大的數(shù)據(jù)集來(lái)說(shuō),要學(xué)習(xí)的權(quán)重太多,模型容易產(chǎn)生過(guò)擬合現(xiàn)象。因此,加權(quán)平均法不一定優(yōu)于簡(jiǎn)單平均法。一般而言,在個(gè)體學(xué)習(xí)器性能差異較大時(shí)宜使用加權(quán)平均法,而在個(gè)體學(xué)習(xí)器性能相近時(shí)宜使用簡(jiǎn)單平均法。集成學(xué)習(xí)第7章在分類(lèi)任務(wù)中,通常使用投票法。具體流程為每個(gè)個(gè)體學(xué)習(xí)器從類(lèi)別標(biāo)簽集合中預(yù)測(cè)出一個(gè)標(biāo)簽,然后通過(guò)投票決定最終的模型預(yù)測(cè)結(jié)果。投票法分為絕對(duì)多數(shù)投票法、相對(duì)多數(shù)投票法和加權(quán)投票法3種。(1)絕對(duì)多數(shù)投票法:某標(biāo)簽票數(shù)超過(guò)半數(shù),則模型預(yù)測(cè)為該標(biāo)簽,否則拒絕預(yù)測(cè)。這在可靠性要求較高的學(xué)習(xí)任務(wù)中是一個(gè)很好的機(jī)制。(2)相對(duì)多數(shù)投票法:預(yù)測(cè)值為票數(shù)最多的標(biāo)簽,如果同時(shí)有多個(gè)標(biāo)簽獲得最高票數(shù),則從中隨機(jī)選取一個(gè)。(3)加權(quán)投票法:與加權(quán)平均法類(lèi)似,在投票時(shí)需要考慮個(gè)體學(xué)習(xí)器的權(quán)重。(2).投票法集成學(xué)習(xí)第7章當(dāng)訓(xùn)練集很大時(shí),一種更為強(qiáng)大的結(jié)合策略是學(xué)習(xí)法。學(xué)習(xí)法是指通過(guò)一個(gè)學(xué)習(xí)器將各個(gè)個(gè)體學(xué)習(xí)器進(jìn)行結(jié)合的一種策略,通常把個(gè)體學(xué)習(xí)器稱(chēng)為初級(jí)學(xué)習(xí)器,用于結(jié)合的學(xué)習(xí)器稱(chēng)為次級(jí)學(xué)習(xí)器或元學(xué)習(xí)器。點(diǎn)撥學(xué)習(xí)法的典型代表是Stacking,Stacking先從初始數(shù)據(jù)集中訓(xùn)練出初級(jí)學(xué)習(xí)器,然后“生成”一個(gè)新數(shù)據(jù)集用于訓(xùn)練次級(jí)學(xué)習(xí)器。在這個(gè)新數(shù)據(jù)集中,各個(gè)初級(jí)學(xué)習(xí)器的輸出值是特征變量,而初始樣本的標(biāo)簽仍然是新數(shù)據(jù)集中對(duì)應(yīng)樣本的標(biāo)簽。對(duì)于一個(gè)待測(cè)樣本,初級(jí)學(xué)習(xí)器可預(yù)測(cè)出該樣本的所屬類(lèi)別,然后將各個(gè)初級(jí)學(xué)習(xí)器的輸出值(預(yù)測(cè)完成的類(lèi)別標(biāo)簽)作為次級(jí)學(xué)習(xí)器的輸入值傳入次級(jí)學(xué)習(xí)器,次級(jí)學(xué)習(xí)器即可輸出集成學(xué)習(xí)模型的最終預(yù)測(cè)結(jié)果。(3).學(xué)習(xí)法集成學(xué)習(xí)第7章(3)集成學(xué)習(xí)的類(lèi)型根據(jù)個(gè)體學(xué)習(xí)器的生成方式不同,集成學(xué)習(xí)可分為兩大類(lèi),一類(lèi)為并行化集成學(xué)習(xí),即個(gè)體學(xué)習(xí)器之間不存在強(qiáng)依賴(lài)關(guān)系,可同時(shí)生成的集成學(xué)習(xí)模式,其代表算法是Bagging和隨機(jī)森林;另一類(lèi)為串行化集成學(xué)習(xí),即個(gè)體學(xué)習(xí)器之間存在強(qiáng)依賴(lài)關(guān)系,必須串行生成的集成學(xué)習(xí)模式,其代表算法是Boosting。第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法7.2Bagging算法14Bagging算法是并行式集成學(xué)習(xí)方法中最著名的代表,其基本原理是,給定一個(gè)訓(xùn)練樣本數(shù)據(jù)集,基于這個(gè)數(shù)據(jù)集采用“自助采樣法(bootstrapsampling)”生成T個(gè)子數(shù)據(jù)集,然后使用每個(gè)子數(shù)據(jù)集訓(xùn)練一個(gè)個(gè)體學(xué)習(xí)器,再將這些個(gè)體學(xué)習(xí)器進(jìn)行結(jié)合得到Bagging模型,如圖2所示。Bagging算法在進(jìn)行結(jié)合時(shí),通常對(duì)分類(lèi)任務(wù)使用簡(jiǎn)單投票法,對(duì)回歸任務(wù)使用簡(jiǎn)單平均法。圖2Bagging分類(lèi)算法原理1.Bagging算法的基本原理7.2Bagging算法15(1)給定一個(gè)包含m個(gè)樣本的數(shù)據(jù)集,先隨機(jī)取出一個(gè)樣本放入采樣集中,再將該樣本放回初始數(shù)據(jù)集中,使得下次采樣時(shí)該樣本仍有可能被選中。(2)隨機(jī)抽取第2個(gè)樣本放入采樣集中,然后再將該樣本放回初始數(shù)據(jù)集中。(3)經(jīng)過(guò)m次隨機(jī)采樣操作,就可以得到一個(gè)包含m個(gè)樣本的子數(shù)據(jù)集。(4)重復(fù)以上步驟,即可得到第2個(gè)子數(shù)據(jù)集、第3個(gè)子數(shù)據(jù)集,直到第T個(gè)子數(shù)據(jù)集。自助采樣法的采樣過(guò)程如下。高手點(diǎn)撥7.2Bagging算法16Sklearn的ensemble模塊提供了BaggingClassifier類(lèi)和BaggingRegressor類(lèi),分別用于實(shí)現(xiàn)Bagging分類(lèi)和回歸算法。在Sklearn中,可通過(guò)下面語(yǔ)句導(dǎo)入Bagging算法模塊。fromsklearn.ensembleimportBaggingClassifier #導(dǎo)入Bagging分類(lèi)模塊fromsklearn.ensembleimportBaggingRegressor #導(dǎo)入Bagging回歸模塊2.Bagging算法的Sklearn實(shí)現(xiàn)7.2Bagging算法17BaggingClassifier類(lèi)和BaggingRegressor類(lèi)都有如下幾個(gè)參數(shù)。(1)參數(shù)base_estimator用于指定個(gè)體學(xué)習(xí)器的基礎(chǔ)算法。(2)參數(shù)n_estimators用于設(shè)置要集成的個(gè)體學(xué)習(xí)器的數(shù)量。(3)在Sklearn中,Bagging算法允許用戶(hù)設(shè)置訓(xùn)練個(gè)體學(xué)習(xí)器的樣本數(shù)量和特征數(shù)量,分別使用參數(shù)max_samples和參數(shù)max_features進(jìn)行設(shè)置。(4)參數(shù)random_state用于設(shè)置隨機(jī)數(shù)生成器的種子,能夠隨機(jī)抽取樣本和特征。2.Bagging算法的Sklearn實(shí)現(xiàn)7.2Bagging算法18【例7-1】使用Bagging算法(用k近鄰算法訓(xùn)練個(gè)體學(xué)習(xí)器)與k近鄰算法對(duì)Sklearn自帶的鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi),并比較兩個(gè)模型的預(yù)測(cè)準(zhǔn)確率。使用Bagging算法與k近鄰算法對(duì)鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)并比較兩個(gè)模型的預(yù)測(cè)準(zhǔn)確率的步驟如下。(1)導(dǎo)入Sklearn自帶的鳶尾花數(shù)據(jù)集,然后將數(shù)據(jù)集拆分為訓(xùn)練集與測(cè)試集,并尋找k近鄰模型的最優(yōu)k值。【程序分析】2.Bagging算法的Sklearn實(shí)現(xiàn)19程序運(yùn)行結(jié)果如圖3所示。可見(jiàn),當(dāng)k的值為6、7、10、11或12時(shí),模型的預(yù)測(cè)誤差率最低?!具\(yùn)行結(jié)果】7.2Bagging算法圖3k值與預(yù)測(cè)誤差率的關(guān)系2.Bagging算法的Sklearn實(shí)現(xiàn)【參考代碼】
fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportBaggingClassifierfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimportcross_val_scoreimportmatplotlib.pyplotasplt#拆分?jǐn)?shù)據(jù)集x,y=load_iris().data,load_iris().targetx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0,test_size=0.5)#k取不同值的情況下,計(jì)算模型的預(yù)測(cè)誤差率k_range=range(1,15) #設(shè)置k值的取值范圍k_error=[] #k_error用于保存預(yù)測(cè)誤差率數(shù)據(jù)forkink_range:model=KNeighborsClassifier(n_neighbors=k)scores=cross_val_score(model,x,y,cv=5,scoring='accuracy') #5折交叉驗(yàn)證k_error.append(1-scores.mean())#畫(huà)圖,x軸表示k的取值,y軸表示預(yù)測(cè)誤差率plt.rcParams['font.sans-serif']='Simhei'plt.plot(k_range,k_error,'r-')plt.xlabel('k的取值')plt.ylabel('預(yù)測(cè)誤差率')plt.show()20程序運(yùn)行結(jié)果如圖4所示??梢?jiàn),基于k近鄰算法的Bagging模型對(duì)k近鄰模型進(jìn)行了加強(qiáng),預(yù)測(cè)準(zhǔn)確率高于k近鄰模型?!具\(yùn)行結(jié)果】7.2Bagging算法(2)當(dāng)k=6時(shí),分別訓(xùn)練k近鄰模型和基于k近鄰算法的Bagging模型。圖4兩個(gè)模型的預(yù)測(cè)準(zhǔn)確率2.Bagging算法的Sklearn實(shí)現(xiàn)【參考代碼】
#定義模型kNNmodel=KNeighborsClassifier(6) #k近鄰模型Baggingmodel=BaggingClassifier(KNeighborsClassifier(6),n_estimators=130,max_samples=0.4,max_features=4,random_state=1) #Bagging模型#訓(xùn)練模型kNNmodel.fit(x_train,y_train)Baggingmodel.fit(x_train,y_train)#評(píng)估模型kNN_pre=kNNmodel.predict(x_test)kNN_ac=accuracy_score(y_test,kNN_pre)print("k近鄰模型預(yù)測(cè)準(zhǔn)確率:",kNN_ac)Bagging_pre=Baggingmodel.predict(x_test)Bagging_ac=accuracy_score(y_test,Bagging_pre)print("基于k近鄰算法的Bagging模型的預(yù)測(cè)準(zhǔn)確率:",Bagging_ac)第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法7.3隨機(jī)森林算法22隨機(jī)森林(randomforest,RF)算法是Bagging算法的一個(gè)擴(kuò)展變體,其基學(xué)習(xí)器指定為決策樹(shù),但在訓(xùn)練過(guò)程中加入隨機(jī)屬性選擇,即在構(gòu)建單棵決策樹(shù)的過(guò)程中,隨機(jī)森林算法并不會(huì)利用子數(shù)據(jù)集中所有的特征屬性訓(xùn)練決策樹(shù)模型,而是在樹(shù)的每個(gè)節(jié)點(diǎn)處從m個(gè)特征屬性中隨機(jī)挑選k個(gè)特征屬性(),一般按照節(jié)點(diǎn)基尼指數(shù)最小的原則從這k個(gè)特征屬性中選出一個(gè),對(duì)節(jié)點(diǎn)進(jìn)行分裂,讓這棵樹(shù)充分生長(zhǎng),不進(jìn)行通常的剪枝操作。1.隨機(jī)森林算法的基本原理237.3隨機(jī)森林算法在隨機(jī)森林算法生成單棵決策樹(shù)的過(guò)程中,參數(shù)k控制了特征屬性的選取數(shù)量,若,則隨機(jī)森林中單棵決策樹(shù)的構(gòu)建與傳統(tǒng)的決策樹(shù)算法相同。一般情況下,推薦k的取值為。高手點(diǎn)撥7.3隨機(jī)森林算法24隨機(jī)森林模型往往具有很高的預(yù)測(cè)準(zhǔn)確率,對(duì)異常值和噪聲具有很好的容忍度,且不容易出現(xiàn)過(guò)擬合現(xiàn)象。在實(shí)際應(yīng)用中,隨機(jī)森林算法的優(yōu)點(diǎn)有:①構(gòu)建單棵決策樹(shù)時(shí),選擇部分樣本及部分特征,能在一定程度上避免出現(xiàn)過(guò)擬合現(xiàn)象;②構(gòu)建單棵決策樹(shù)時(shí),隨機(jī)選擇樣本及特征,使得模型具有很好的抗噪能力,性能穩(wěn)定;③能處理很高維度的數(shù)據(jù),并且不需要進(jìn)行特征選擇和降維處理。隨機(jī)森林算法的缺點(diǎn)在于參數(shù)較復(fù)雜,模型訓(xùn)練和預(yù)測(cè)速度較慢。1.隨機(jī)森林算法的基本原理257.3隨機(jī)森林算法Sklearn的ensemble模塊提供了RandomForestClassifier類(lèi)和RandomForestRegressor類(lèi),分別用于實(shí)現(xiàn)隨機(jī)森林分類(lèi)和回歸算法。在Sklearn中,可通過(guò)下面語(yǔ)句導(dǎo)入隨機(jī)森林算法模塊。fromsklearn.ensembleimportRandomForestClassifier #導(dǎo)入隨機(jī)森林分類(lèi)模塊fromsklearn.ensembleimportRandomForestRegressor #導(dǎo)入隨機(jī)森林回歸模塊2.隨機(jī)森林算法的Sklearn實(shí)現(xiàn)26RandomForestClassifier類(lèi)和RandomForestRegressor類(lèi)都有如下幾個(gè)參數(shù)。(1)參數(shù)n_estimators用于設(shè)置要集成的決策樹(shù)的數(shù)量。(2)參數(shù)criterion用于設(shè)置特征屬性的評(píng)價(jià)標(biāo)準(zhǔn),RandomForestsClassifier中參數(shù)criterion的取值有g(shù)ini和entronpy,gini表示基尼指數(shù),entronpy表示信息增益,默認(rèn)值為gini;RandomForestsRegressor中criterion的取值有mse和mae,mse表示均方差,mae表示平均絕對(duì)誤差,默認(rèn)值為mse。(3)參數(shù)max_features用于設(shè)置允許單棵決策樹(shù)使用特征的最大值。(4)參數(shù)random_state表示隨機(jī)種子,用于控制隨機(jī)模式,當(dāng)random_state取某一個(gè)值時(shí),即可確定一種規(guī)則。7.3隨機(jī)森林算法2.隨機(jī)森林算法的Sklearn實(shí)現(xiàn)27【例7-2】使用隨機(jī)森林算法對(duì)Sklearn自帶的鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)。使用隨機(jī)森林算法對(duì)鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)的步驟如下。(1)使用隨機(jī)森林算法訓(xùn)練模型,并輸出模型的預(yù)測(cè)準(zhǔn)確率?!境绦蚍治觥?.3隨機(jī)森林算法2.隨機(jī)森林算法的Sklearn實(shí)現(xiàn)28程序運(yùn)行結(jié)果如圖5所示?!具\(yùn)行結(jié)果】7.3隨機(jī)森林算法圖5隨機(jī)森林模型的預(yù)測(cè)準(zhǔn)確率2.隨機(jī)森林算法的Sklearn實(shí)現(xiàn)【參考代碼】
fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_scoreimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormapimportnumpyasnp#拆分?jǐn)?shù)據(jù)集x,y=load_iris().data[:,2:4],load_iris().targetx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0,test_size=50)#訓(xùn)練模型model=RandomForestClassifier(n_estimators=10,random_state=0)model.fit(x_train,y_train)#評(píng)估模型pred=model.predict(x_test)ac=accuracy_score(y_test,pred)print("隨機(jī)森林模型的預(yù)測(cè)準(zhǔn)確率:",ac)29程序運(yùn)行結(jié)果如圖6所示??梢?jiàn),隨機(jī)森林模型可有效地對(duì)樣本數(shù)據(jù)進(jìn)行分類(lèi)。【運(yùn)行結(jié)果】7.3隨機(jī)森林算法(2)使用Matplotlib繪制圖形,顯示模型的分類(lèi)效果。圖6隨機(jī)森林模型分類(lèi)效果2.隨機(jī)森林算法的Sklearn實(shí)現(xiàn)【參考代碼】
x1,x2=np.meshgrid(np.linspace(0,8,500),np.linspace(0,3,500))x_new=np.stack((x1.flat,x2.flat),axis=1)y_predict=model.predict(x_new)y_hat=y_predict.reshape(x1.shape)iris_cmap=ListedColormap(["#ACC6C0","#FF8080","#A0A0FF"])plt.pcolormesh(x1,x2,y_hat,cmap=iris_cmap)#繪制3種類(lèi)別鳶尾花的樣本點(diǎn)plt.scatter(x[y==0,0],x[y==0,1],s=30,c='g',marker='^')plt.scatter(x[y==1,0],x[y==1,1],s=30,c='r',marker='o')plt.scatter(x[y==2,0],x[y==2,1],s=30,c='b',marker='s')#設(shè)置坐標(biāo)軸的名稱(chēng)并顯示圖形plt.rcParams['font.sans-serif']='Simhei'plt.xlabel('花瓣長(zhǎng)度')plt.ylabel('花瓣寬度')plt.show()第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法7.4Boosting算法的基本原理31Boosting是一族可將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的算法,是串行式集成學(xué)習(xí)方法中最著名的代表。Boosting家族中各個(gè)算法的工作原理類(lèi)似,即先從初始訓(xùn)練集中訓(xùn)練出一個(gè)個(gè)體學(xué)習(xí)器,并對(duì)這個(gè)個(gè)體學(xué)習(xí)器預(yù)測(cè)錯(cuò)誤的樣本進(jìn)行關(guān)注,然后調(diào)整訓(xùn)練樣本的分布,基于調(diào)整后的樣本訓(xùn)練下一個(gè)個(gè)體學(xué)習(xí)器,如此重復(fù)直到個(gè)體學(xué)習(xí)器的數(shù)量達(dá)到事先指定的值T,再將這T個(gè)個(gè)體學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合,得到最終模型。32Boosting家族中比較有代表性的算法是AdaBoost,AdaBoost算法從訓(xùn)練樣本出發(fā),通過(guò)不斷調(diào)整訓(xùn)練樣本的權(quán)重或概率分布來(lái)訓(xùn)練模型,其基本流程如下。7.4Boosting算法的基本原理(1)將初始訓(xùn)練集D中每個(gè)樣本的權(quán)重都設(shè)置為一個(gè)相同的值(N為初始訓(xùn)練集的樣本數(shù)量),使用初始訓(xùn)練集訓(xùn)練一個(gè)個(gè)體學(xué)習(xí)器。(2)使用訓(xùn)練完成的個(gè)體學(xué)習(xí)器對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行預(yù)測(cè),然后增加預(yù)測(cè)錯(cuò)誤的樣本的權(quán)重,減少預(yù)測(cè)正確的樣本的權(quán)重,獲得帶權(quán)重的訓(xùn)練集。(3)使用上一步迭代完成的訓(xùn)練集重新訓(xùn)練模型,得到下一個(gè)個(gè)體學(xué)習(xí)器。(4)重復(fù)步驟(2)和步驟(3),直到個(gè)體學(xué)習(xí)器的數(shù)量達(dá)到事先指定的值T,然后將這T個(gè)個(gè)體學(xué)習(xí)器進(jìn)行加權(quán)結(jié)合,得到最終模型。33在AdaBoost算法中,訓(xùn)練樣本的權(quán)重會(huì)被逐個(gè)修改。隨著迭代次數(shù)的增加,難以預(yù)測(cè)正確的樣本對(duì)模型的影響越來(lái)越大,弱學(xué)習(xí)器更加關(guān)注這些樣本,其預(yù)測(cè)準(zhǔn)確率就會(huì)逐漸提升,最終將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器。7.5AdaBoost算法34Sklearn的ensemble模塊提供了AdaBoostClassifier類(lèi)和AdaBoostRegressor類(lèi),分別用于實(shí)現(xiàn)AdBboost分類(lèi)和回歸算法。在Sklearn中,可通過(guò)下面語(yǔ)句導(dǎo)入AdaBoost算法模塊。7.5AdaBoost算法fromsklearn.ensembleimportAdaBoostClassifier #導(dǎo)入AdaBoost分類(lèi)模塊fromsklearn.ensembleimportAdaBoostRegressor #導(dǎo)入AdaBoost回歸模塊35AdaBoostClassifier類(lèi)和AdaBoostRegressor類(lèi)都有如下幾個(gè)參數(shù)。(1)參數(shù)base_estimator用于指定個(gè)體學(xué)習(xí)器的基礎(chǔ)算法,常用的算法是CART決策樹(shù)或神經(jīng)網(wǎng)絡(luò)(神經(jīng)網(wǎng)絡(luò)算法將在后面項(xiàng)目中介紹)。(2)參數(shù)n_estimators用于設(shè)置要集成的個(gè)體學(xué)習(xí)器的數(shù)量,其默認(rèn)值為50。一般來(lái)說(shuō)n_estimators值設(shè)置得較小,模型容易出現(xiàn)欠擬合現(xiàn)象,n_estimators值設(shè)置得較大,模型容易出現(xiàn)過(guò)擬合現(xiàn)象。在實(shí)際調(diào)參過(guò)程中,該參數(shù)經(jīng)常與參數(shù)learning_rate一起調(diào)節(jié)。(3)參數(shù)learning_rate為弱學(xué)習(xí)器的權(quán)重縮減系數(shù),其取值范圍為0~1。對(duì)于同樣的訓(xùn)練集擬合效果,較小的learning_rate值意味著需要更多數(shù)量的弱學(xué)習(xí)器。7.5AdaBoost算法36【例8-3】使用AdaBoost算法對(duì)Sklearn自帶的鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)。AdaBoost算法的參數(shù)n_estimators往往要與參數(shù)learning_rate一起調(diào)節(jié),可使用網(wǎng)格搜索法尋找參數(shù)的最優(yōu)值,然后輸出最優(yōu)參數(shù)值與對(duì)應(yīng)模型的預(yù)測(cè)準(zhǔn)確率?!境绦蚍治觥?.5AdaBoost算法37程序運(yùn)行結(jié)果如圖7所示??梢?jiàn),網(wǎng)格搜索法找到的最優(yōu)參數(shù)值為{'learning_rate':0.005,'n_estimators':40},這組參數(shù)值對(duì)應(yīng)的模型給出了較高的預(yù)測(cè)準(zhǔn)確率。【運(yùn)行結(jié)果】7.5AdaBoost算法圖7最優(yōu)參數(shù)值與對(duì)應(yīng)模型的預(yù)測(cè)準(zhǔn)確率【參考代碼】
fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimportGridSearchCVfromsklearn.model_selectionimportStratifiedShuffleSplit #拆分?jǐn)?shù)據(jù)集x,y=load_iris().data,load_iris().targetx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0,test_size=50)param_grid={'n_estimators':[10,20,30,40,50,60,70,80,90,100],'learning_rate':[0.0001,0.0005,0.001,0.005,0.01,0.05,0.1,0.5,0.6,0.7,0.8,0.9]}cv=StratifiedShuffleSplit(n_splits=5,test_size=0.3,random_state=420) #對(duì)樣本進(jìn)行分層抽樣grid=GridSearchCV(AdaBoostClassifier(DecisionTreeClassifier(criterion='gini',max_depth=3),random_state=0),param_grid=param_grid,cv=cv)grid.fit(x_train,y_train)model=grid.best_estimator_ #獲取最優(yōu)模型pred=model.predict(x_test)ac=accuracy_score(y_test,pred)print("最優(yōu)參數(shù)值為:%s"%grid.best_params_)print("最優(yōu)參數(shù)值對(duì)應(yīng)模型的預(yù)測(cè)準(zhǔn)確率為:%f"%ac)第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法7.6GBDT算法39
與AdaBoost類(lèi)似,梯度提升也是逐步訓(xùn)練一系列基本學(xué)習(xí)器模型,每一個(gè)學(xué)習(xí)器模型都是對(duì)前一個(gè)學(xué)習(xí)器模型的改進(jìn),每一步都是彌補(bǔ)前一模型的不足。但存在不同之處。在梯度提升中,訓(xùn)練第一個(gè)學(xué)習(xí)器模型后,用該模型預(yù)測(cè)訓(xùn)練集的目標(biāo)值。計(jì)算真實(shí)值和目標(biāo)值之間的誤差。后一個(gè)學(xué)習(xí)器模型對(duì)前一個(gè)模型預(yù)測(cè)結(jié)果的誤差進(jìn)行擬合學(xué)習(xí),逐步減小樣本損失值。限于篇幅,這里對(duì)原理不展開(kāi)詳細(xì)的闡述。梯度提升法可以設(shè)置不同的損失函數(shù)來(lái)處理分類(lèi)、回歸等學(xué)習(xí)任務(wù)。梯度提升法通過(guò)bagging采樣方法、加入正則項(xiàng)等措施提高了模型的健壯性。梯度提升法是目前比較有效的學(xué)習(xí)方法之一。
基本模型采用決策樹(shù)的梯度提升法稱(chēng)為梯度提升決策樹(shù)(GBDT),是近幾年企業(yè)界常用的學(xué)習(xí)方法之一,分為梯度提升回歸樹(shù)和梯度提升分類(lèi)樹(shù)。Scikit-learn中用類(lèi)GradientBoostingRegressor實(shí)現(xiàn)梯度提升回歸樹(shù),用類(lèi)GradientBoostingClassifier實(shí)現(xiàn)梯度提升分類(lèi)樹(shù)。7.6GBDT算法的基本原理GBDT算法是利用梯度下降的思想,使用損失函數(shù)的負(fù)梯度在當(dāng)前模型的值,作為提升樹(shù)中殘差的近似值,以此來(lái)擬合回歸決策樹(shù)。梯度提升決策樹(shù)的算法過(guò)程如下:(1)初始化決策樹(shù),估計(jì)一個(gè)使損失函數(shù)最小化的常數(shù)構(gòu)建一個(gè)只有根節(jié)點(diǎn)的樹(shù)。(2)不斷提升迭代:①計(jì)算當(dāng)前模型中損失函數(shù)的負(fù)梯度值,作為殘差的估計(jì)值;②估計(jì)回歸樹(shù)中葉子節(jié)點(diǎn)的區(qū)域,擬合殘差的近似值;③利用線性搜索估計(jì)葉子節(jié)點(diǎn)區(qū)域的值,使損失函數(shù)極小化;④更新決策樹(shù)。經(jīng)過(guò)若干輪的提升法迭代過(guò)程之后,輸出最終的模型。401.GBDT算法的基本原理7.6GBDT算法41(1).梯度提升回歸樹(shù)(GBRT)在scikit-learn中,GradientBoostingRegressor用于實(shí)現(xiàn)梯度提升回歸樹(shù)算法。創(chuàng)建該類(lèi)對(duì)象的初始化格式為:GradientBoostingRegressor(*,loss='squared_error',learning_rate=0.1,n_estimators=100,subsample=1.0,criterion='friedman_mse',min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_depth=3,min_impurity_decrease=0.0,init=None,random_state=None,max_features=None,alpha=0.9,verbose=0,max_leaf_nodes=None,warm_start=False,validation_fraction=0.1,n_iter_no_change=None,tol=0.0001,ccp_alpha=0.0)?;灸P筒捎脹Q策樹(shù)算法,因此沒(méi)有基本學(xué)習(xí)器的參數(shù)??梢酝ㄟ^(guò)幫助文檔了解這些參數(shù)的詳細(xì)用法。2GBDT算法的Sklearn實(shí)現(xiàn)7.6GBDT算法42(1).梯度提升分類(lèi)樹(shù)(GBCT)在scikit-learn中,GradientBoostingClassifier實(shí)現(xiàn)了梯度提升分類(lèi)樹(shù)算法。創(chuàng)建該類(lèi)對(duì)象的初始化格式為:GradientBoostingClassifier(*,loss='deviance',learning_rate=0.1,n_estimators=100,subsample=1.0,criterion='friedman_mse',min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_depth=3,min_impurity_decrease=0.0,init=None,random_state=None,max_features=None,verbose=0,max_leaf_nodes=None,warm_start=False,validation_fraction=0.1,n_iter_no_change=None,tol=0.0001,ccp_alpha=0.0)。2GBDT算法的Sklearn實(shí)現(xiàn)7.6GBDT算法43(1)加載加利福尼亞住房數(shù)據(jù)集,訓(xùn)練梯度提升回歸模型,并顯示訓(xùn)練集和測(cè)試集上的決定系數(shù)。1.加載加利福尼亞住房數(shù)據(jù)集,并劃分訓(xùn)練集和測(cè)試集fromsklearn.datasetsimportfetch_california_housingfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportGradientBoostingRegressor2.創(chuàng)建并訓(xùn)練梯度提升回歸樹(shù)模型housing=fetch_california_housing(data_home="./dataset")X,y=housing.data,housing.targetX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)gbr=GradientBoostingRegressor(n_estimators=500)gbr.fit(X_train,y_train)3GBDT算法的應(yīng)用舉例7.6GBDT算法44(1)加載加利福尼亞住房數(shù)據(jù)集,訓(xùn)練梯度提升回歸模型,并顯示訓(xùn)練集和測(cè)試集上的決定系數(shù)。1.加載加利福尼亞住房數(shù)據(jù)集,并劃分訓(xùn)練集和測(cè)試集fromsklearn.datasetsimportfetch_california_housingfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportGradientBoostingRegressor3GBDT算法的應(yīng)用舉例7.6GBDT算法452.創(chuàng)建并訓(xùn)練梯度提升回歸樹(shù)模型housing=fetch_california_housing(data_home="./dataset")X,y=housing.data,housing.targetX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)gbr=GradientBoostingRegressor(n_estimators=500)gbr.fit(X_train,y_train)print("訓(xùn)練集決定系數(shù)R^2:",gbr.score(X_train,y_train))print("測(cè)試集決定系數(shù)R^2:",gbr.score(X_test,y_test))print("測(cè)試集前3個(gè)樣本的預(yù)測(cè)值:",gbr.predict(X_test[:3]))print("測(cè)試集前3個(gè)樣本的真實(shí)值:",y_test[:3])3GBDT算法的應(yīng)用舉例7.6GBDT算法46執(zhí)行結(jié)果為:訓(xùn)練集決定系數(shù)R2:0.8706501361869171測(cè)試集決定系數(shù)R2:0.8253575490464196測(cè)試集前3個(gè)樣本的預(yù)測(cè)值:[1.502647722.600858571.49035211]測(cè)試集前3個(gè)樣本的真實(shí)值:[1.3692.4132.007]3GBDT算法的應(yīng)用舉例7.6GBDT算法47(2)利用例12-5中用過(guò)的、從UCI機(jī)器學(xué)習(xí)庫(kù)下載的玻璃分類(lèi)數(shù)據(jù)集,采用GradientBoostingClassifier建立分類(lèi)模型。顯示訓(xùn)練集和測(cè)試集的預(yù)測(cè)準(zhǔn)確率,并顯示測(cè)試集中前兩個(gè)樣本的預(yù)測(cè)標(biāo)簽。1.加載數(shù)據(jù)集,并劃分訓(xùn)練集和測(cè)試集importpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportGradientBoostingClassifier3GBDT算法的應(yīng)用舉例7.6GBDT算法482.創(chuàng)建并訓(xùn)練梯度提升樹(shù)分類(lèi)器模型filename="./glass.data"glass_data=pd.read_csv(filename,index_col=0,header=None)X,y=glass_data.iloc[:,:-1].values,glass_data.iloc[:,-1].valuesX_train,X_test,y_train,y_test=train_test_split(X,y,shuffle=True,stratify=y,random_state=1)gbc=GradientBoostingClassifier(n_estimators=500)gbc.fit(X_train,y_train)3GBDT算法的應(yīng)用舉例7.6GBDT算法49print("訓(xùn)練集準(zhǔn)確率:",gbc.score(X_train,y_train),sep="")print("測(cè)試集準(zhǔn)確率:",gbc.score(X_test,y_test),sep="")print("對(duì)測(cè)試集前2個(gè)樣本預(yù)測(cè)的分類(lèi)標(biāo)簽:\n",gbc.predict(X_test[:2]),sep="")print("對(duì)測(cè)試集前2個(gè)樣本預(yù)測(cè)的分類(lèi)概率:\n",gbc.predict_proba(X_test[:2]),sep="")print("分類(lèi)器中的標(biāo)簽排列:",gbc.classes_)#概率預(yù)測(cè)轉(zhuǎn)化為標(biāo)簽預(yù)測(cè)print("根據(jù)預(yù)測(cè)概率推算預(yù)測(cè)標(biāo)簽:",end="")foriingbc.predict_proba(X_test[:2]).argmax(axis=1):print(gbc.classes_[i],end="")print("\n測(cè)試集前2個(gè)樣本的真實(shí)標(biāo)簽:",y_test[:2],sep="")3GBDT算法的應(yīng)用舉例7.6GBDT算法50執(zhí)行結(jié)果為:訓(xùn)練集準(zhǔn)確率:1.0測(cè)試集準(zhǔn)確率:0.7592592592592593對(duì)測(cè)試集前2個(gè)樣本預(yù)測(cè)的分類(lèi)標(biāo)簽:[32]對(duì)測(cè)試集前2個(gè)樣本預(yù)測(cè)的分類(lèi)概率:[[2.20584863e-011.34886892e-016.38114639e-014.34071098e-033.99628946e-041.67326553e-03][3.25851887e-099.99999972e-014.22518469e-145.25297471e-117.07414283e-152.48198735e-08]]分類(lèi)器中的標(biāo)簽排列:[123567]根據(jù)預(yù)測(cè)概率推算預(yù)測(cè)標(biāo)簽:32測(cè)試集前2個(gè)樣本的真實(shí)標(biāo)簽:[32]3GBDT算法的應(yīng)用舉例第7章
集成學(xué)習(xí)與實(shí)現(xiàn)集成學(xué)習(xí)的概念Bagging算法隨機(jī)森林算法Boosting算法7.7XGBoost算法52對(duì)于GBDT算法的具體實(shí)現(xiàn),最為出色的是XGBoost樹(shù)提升系統(tǒng),此模型的性能已得到廣泛認(rèn)可,并被大量應(yīng)用于Kaggle等數(shù)據(jù)挖掘比賽中,取得了極好的效果。在XGBoost系統(tǒng)實(shí)現(xiàn)的過(guò)程中,對(duì)于GBDT算法進(jìn)行了多方面的優(yōu)化。由于諸多方面的優(yōu)化實(shí)現(xiàn),XGBoost在性能和運(yùn)行速度上都優(yōu)于一般的GBDT算法。1.XGBoost算法的基本原理
XGBoost(ExtremeGradientBoosting)算法是一種基于GBDT的算法,其基本思想于GBDT類(lèi)似,每一次計(jì)算都要減少前一次的殘差值,但XGBoost進(jìn)行了優(yōu)化,包括在損失函數(shù)中增加正則化項(xiàng),縮減樹(shù)權(quán)重和列采樣,在工程實(shí)現(xiàn)方面采用行列塊并行學(xué)習(xí),減少時(shí)間開(kāi)銷(xiāo)。7.7XGBoost算法53XGBoost軟件包是對(duì)原始梯度提升算法的高效實(shí)現(xiàn),常用于一些數(shù)據(jù)挖掘競(jìng)賽中。在使用之前要先安裝??梢酝ㄟ^(guò)pipinstallxgboost在線安裝。也可以先下載whl文件,然后在本地安裝。XGBClassifier和XGBRegressor兩個(gè)類(lèi)分別實(shí)現(xiàn)了梯度提升分類(lèi)和回歸。這兩個(gè)類(lèi)均位于模塊xgboost.sklearn中。XGBoost中API的調(diào)用方法與scikit-learn中的調(diào)用方法類(lèi)似。2.XGBoost算法的Sklearn實(shí)現(xiàn)下面是在Python環(huán)境下使用XGBoost模塊進(jìn)行回歸的調(diào)用示例,首先用pandas構(gòu)造一個(gè)最簡(jiǎn)單的數(shù)據(jù)集df,其中x的值為[1,2,3],y的值為[10,20,30],并構(gòu)建訓(xùn)練集矩陣T_train_xbg。代碼如下7.7XGBoost算法54importpandasaspdimportxgboostasxgbdf=pd.DataFrame({'x':[1,2,3],'y':[10,20,30]})X_train=df.drop('y',axis=1)Y_train=df['y']T_train_xgb=xgb.DMatrix(X_train,Y_train)params={"objective":"reg:linear","booster":"gblinear"}gbm=xgb.train(dtrain=T_train_xgb,params=params)Y_pred=gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4,5]})))print(Y_pred)7.7XGBoost算法55XGBClassifier中初始化參數(shù)use_label_encoder已被棄用,在線文檔建議新的程序設(shè)置use_label_encoder=False。此時(shí),要求類(lèi)別標(biāo)簽值是從0開(kāi)始到類(lèi)別總數(shù)減一的連續(xù)整數(shù)值。由于玻璃類(lèi)別數(shù)據(jù)集中,類(lèi)別只有1、2、3、5、6、7六種類(lèi)別,因此依次將其編碼到0至5。程序的執(zhí)行結(jié)果中,類(lèi)別標(biāo)簽是轉(zhuǎn)換后的標(biāo)簽值。0至2對(duì)應(yīng)原標(biāo)簽的1至3,3至5對(duì)應(yīng)原標(biāo)簽的5至7。讀者也可以在程序中將標(biāo)簽轉(zhuǎn)換為原標(biāo)簽的值。7.7XGBoost算法56(1)讀取glass.data中的玻璃分類(lèi)數(shù)據(jù)集,拆分訓(xùn)練集和測(cè)試集,用XGClassifier從訓(xùn)練集中學(xué)習(xí)預(yù)測(cè)模型,輸出模型在訓(xùn)練集和測(cè)試集的預(yù)測(cè)準(zhǔn)確率、測(cè)試集中前兩個(gè)樣本的預(yù)測(cè)標(biāo)簽和預(yù)測(cè)概率值,并與真實(shí)值進(jìn)行比較。①.加載數(shù)據(jù)集,并劃分訓(xùn)練集和測(cè)試集importpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromxgboostimportXGBClassifier3.XGBoost算法的應(yīng)用舉例7.7XGBoost算法57②調(diào)整參數(shù)filename="./glass.data"glass_data=pd.read_csv(filename,index_col=0,header=None)X,y=glass_data.iloc[:,:-1].values,glass_data.iloc[:,-1].values#XGBClassifier中初始化參數(shù)use_label_encoder已被棄用#新的程序建議設(shè)置use_label_encoder=False,此時(shí),#類(lèi)別標(biāo)簽必須為整數(shù),值從0開(kāi)始到類(lèi)別總數(shù)-1,并且是連續(xù)的值y=y-1 #原來(lái)類(lèi)別編碼從1開(kāi)始,所以要減去1#原始類(lèi)別編號(hào)沒(méi)有4,因此y=y-1后沒(méi)有3,新編號(hào)4至6的要再減去1y[y==4]=3y[y==5]=4y[y==6]=5#print(y)3.XGBoost算法的應(yīng)用舉例7.7XGBoost算法58③用XGBClassifier創(chuàng)建并訓(xùn)練梯度提升分類(lèi)器模型X_train,X_test,y_train,y_test=train_test_split(X,y,shuffle=True,stratify=y,random_state=0)#用XGBClassifier創(chuàng)建并訓(xùn)練梯度提升分類(lèi)器模型#從XGBoost1.3.0開(kāi)始,與目標(biāo)函數(shù)objective='multi:softprob'一起使用的默認(rèn)評(píng)估指標(biāo)從#'merror'更改為'mlogloss'。如果想恢復(fù)為'merror',顯式地設(shè)置eval_metric="merror"。xgbc=XGBClassifier(n_estimators=500,use_label_encoder=False,objective='multi:softprob',eval_metric="merror")3.XGBoost算法的應(yīng)用舉例7.7XGBoost算法59xgbc.fit(X_train,y_train)print("訓(xùn)練集準(zhǔn)確率:",xgbc.score(X_train,y_train),sep="")print("測(cè)試集準(zhǔn)確率:",xgbc.score(X_test,y_test),sep="")print("對(duì)測(cè)試集前2個(gè)樣本預(yù)測(cè)的分類(lèi)標(biāo)簽:\n",xgbc.predict(X_test[:2]),sep="")p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)許可與使用合作協(xié)議修訂版
- 與時(shí)間賽跑的勵(lì)志議論文文章4篇范文
- 跨領(lǐng)域協(xié)同機(jī)制對(duì)綜合交通樞紐承載能力的促進(jìn)作用
- 村級(jí)集體合作社成立合同
- 出差辦公地點(diǎn)規(guī)劃表格化管理工具使用表格
- 教學(xué)資料清單表格版
- DB14-T 3414-2025 花境植物應(yīng)用技術(shù)指南
- IT技術(shù)產(chǎn)業(yè)數(shù)據(jù)表
- 生物科技研發(fā)中心合作協(xié)議
- 旅游管理知識(shí)點(diǎn)解析
- BRCGS全球標(biāo)準(zhǔn)食品安全第9版標(biāo)準(zhǔn)要求
- 2024年江蘇常州中考滿(mǎn)分作文《那么舊那樣新》
- 北京市初中《體育與健康知識(shí)》學(xué)業(yè)水平考試復(fù)習(xí)題庫(kù)及答案
- 教師口語(yǔ)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋成都師范學(xué)院
- 托幼機(jī)構(gòu)安全管理與傷害預(yù)防托幼機(jī)構(gòu)安全管理與傷害預(yù)防保育師培訓(xùn)李敏課件
- 2025-2030年中國(guó)計(jì)算機(jī)外設(shè)行業(yè)發(fā)展?fàn)顩r及營(yíng)銷(xiāo)戰(zhàn)略研究報(bào)告
- 泳池救生員知識(shí)培訓(xùn)課件
- 2025年寧波華潤(rùn)興光燃?xì)庥邢薰菊衅腹P試參考題庫(kù)含答案解析
- 2025年甘肅省建筑安全員C證考試題庫(kù)
- 一年級(jí)語(yǔ)文上冊(cè)口語(yǔ)交際-小白兔運(yùn)南瓜
- 2025年政府采購(gòu)代理機(jī)構(gòu)考試題及答案
評(píng)論
0/150
提交評(píng)論