




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第13章
集成學(xué)習(xí)1學(xué)習(xí)目標(biāo)理解集成學(xué)習(xí)的基本原理。掌握利用Scikit-learn、mlxtend等庫實(shí)現(xiàn)集成學(xué)習(xí)的基本方法。122目錄頁313.1基本原理13.2應(yīng)用實(shí)例集成學(xué)習(xí)集成學(xué)習(xí)(EnsembleLearning)的核心思想在于“博采眾長”,其通過融合多個(gè)同質(zhì)或異質(zhì)機(jī)器學(xué)習(xí)器求解分類或回歸問題,可有效克服單個(gè)分類或回歸器存在的易出現(xiàn)過擬合、精度較低等缺點(diǎn)。(類似于“三個(gè)臭皮匠頂個(gè)諸葛亮”的思想)。4集成學(xué)習(xí)的理論基礎(chǔ)來自于Kearns和Valiant提出的基于PAC(Probablyapproximatelycorrect)的可學(xué)習(xí)性理論,PAC定義了學(xué)習(xí)算法的強(qiáng)弱:弱學(xué)習(xí)算法:識(shí)別錯(cuò)誤率小于1/2(即準(zhǔn)確率僅比隨機(jī)猜測(cè)略高的算法)。強(qiáng)學(xué)習(xí)算法:識(shí)別準(zhǔn)確率很高并能在多項(xiàng)式時(shí)間內(nèi)可完成的算法。513.1基本原理如圖所示,集成學(xué)習(xí)首先根據(jù)已知訓(xùn)練數(shù)據(jù)產(chǎn)生多個(gè)個(gè)體學(xué)習(xí)器(通常為弱學(xué)習(xí)器),然后通過特定的集成策略將個(gè)體學(xué)習(xí)器進(jìn)行融合以生成強(qiáng)學(xué)習(xí)器;其中,如何生成個(gè)體學(xué)習(xí)器與如何選擇集成策略是集成學(xué)習(xí)首要解決的核心問題。613.1基本原理舉個(gè)例子,假設(shè)你想考研而不知道報(bào)哪個(gè)學(xué)校,你有10個(gè)在不同高校讀研的學(xué)長,你想得到他們的幫助,你可以這樣做:
(1)選出你最信任的那個(gè)朋友,聽從他的建議(普通的學(xué)習(xí)算法,選擇驗(yàn)證效果最好的)。
(2)讓所有朋友給你建議,通過某個(gè)加權(quán)計(jì)算或者投票,計(jì)算出最終的答案(集成學(xué)習(xí),訓(xùn)練多個(gè)基學(xué)習(xí)器,用某種結(jié)合策略得到最終學(xué)習(xí)器)。713.1基本原理(1)個(gè)體學(xué)習(xí)器通常是是一個(gè)已訓(xùn)練好的機(jī)器學(xué)習(xí)模型(例如決策樹、支持向量機(jī)等),若集成后強(qiáng)學(xué)習(xí)器只包含同種類型的個(gè)體學(xué)習(xí)器(如僅包含決策樹),則稱為“同質(zhì)集成”。同質(zhì)集成中的個(gè)體學(xué)習(xí)器也稱為“基學(xué)習(xí)器”,相應(yīng)的學(xué)習(xí)算法稱為“基學(xué)習(xí)算法”。有同質(zhì)就有異質(zhì),若集成包含不同類型的個(gè)體學(xué)習(xí)器,例如同時(shí)包含決策樹和神經(jīng)網(wǎng)絡(luò),那么這時(shí)個(gè)體學(xué)習(xí)器一般不稱為基學(xué)習(xí)器,而稱作“組件學(xué)習(xí)器”。813.1.1基本概念弱學(xué)習(xí)器:常指泛化性能略優(yōu)于隨機(jī)猜測(cè)的學(xué)習(xí)器,例如在二分類問題上精度略高于50%的分類器。但需要注意的是,雖然理論上來說使用弱學(xué)習(xí)器集成足以獲得好的性能,但在實(shí)際中出于種種考慮,例如希望使用較少的個(gè)體學(xué)習(xí)器,或是重用關(guān)于常見學(xué)習(xí)器的一些經(jīng)驗(yàn)等,人們往往會(huì)使用比較強(qiáng)的學(xué)習(xí)器。913.1.1基本概念(2)集成策略如果把好壞不一的結(jié)果混合在一起,則混合后的結(jié)果很可能比最壞的單個(gè)結(jié)果要好一些,但又比最好的單個(gè)結(jié)果要壞一些,這種情況下不如直接取單個(gè)最好的結(jié)果,而不用混合。但是集成學(xué)習(xí)還是對(duì)多個(gè)學(xué)習(xí)器進(jìn)行了結(jié)合,那它怎么保證整體的效果會(huì)比最好的那個(gè)單一學(xué)習(xí)器的效果更好呢?1013.1.1基本概念在一個(gè)二分類任務(wù)中,三個(gè)分類器在三個(gè)測(cè)試樣本上的表現(xiàn)如下圖所示。假設(shè)集成學(xué)習(xí)的結(jié)果通過三個(gè)個(gè)體學(xué)習(xí)器投票的方式產(chǎn)生,即“少數(shù)服從多數(shù)”,那么當(dāng)三個(gè)個(gè)體學(xué)習(xí)器分別對(duì)三個(gè)測(cè)試?yán)胁煌呐袆e優(yōu)勢(shì)時(shí),集成的效果也會(huì)不一樣。1113.1.1基本概念在情況[1]中,每個(gè)個(gè)體學(xué)習(xí)器均只有66.6%的精度但針對(duì)不同測(cè)試集的表現(xiàn)不一,集成后學(xué)習(xí)器的精度卻達(dá)到了100%;在情況[2]中,每個(gè)個(gè)體學(xué)習(xí)器也均只有66.6%的精度但針對(duì)不同測(cè)試集的表現(xiàn)相同,集成后學(xué)習(xí)器的精度沒有任何提高;在情況[3]中,每個(gè)個(gè)體學(xué)習(xí)器的精度均只有33.3%但針對(duì)不同測(cè)試集的表現(xiàn)不一,集成后學(xué)習(xí)器的精度反而更低。1213.1.1基本概念13此例表明:要獲得好的集成,個(gè)體學(xué)習(xí)器應(yīng)“好而不同”,即:個(gè)體學(xué)習(xí)器要有一定的準(zhǔn)確性(精度通常大于0.5),即學(xué)習(xí)器性能不能太差。。個(gè)體學(xué)習(xí)器要有“多樣性”,即學(xué)習(xí)器間具有差異。13.1.1基本概念
13.1.2基礎(chǔ)方法14在集成學(xué)習(xí)中,基礎(chǔ)集成方法側(cè)重于直接將不同個(gè)體學(xué)習(xí)器的輸出結(jié)果進(jìn)行匯總并采用特定的方式產(chǎn)生更可靠的結(jié)果,其間并不關(guān)注個(gè)體學(xué)習(xí)器之間的關(guān)聯(lián)性?;A(chǔ)集成方法主要包括投票法與平均法兩種。(1)投票法投票法分為硬投票與軟投票兩種,其中,硬投票是指?jìng)€(gè)體學(xué)習(xí)器的預(yù)測(cè)結(jié)果為樣本所屬類別的標(biāo)記,軟投票是指?jìng)€(gè)體學(xué)習(xí)器的預(yù)測(cè)結(jié)果為樣本所屬類別的概率。根據(jù)投票方式的不同,投票法又分為絕對(duì)多數(shù)投票、相對(duì)多數(shù)投票與加權(quán)投票三種。
13.1.2基礎(chǔ)方法①絕對(duì)多數(shù)投票若超過半數(shù)的個(gè)體學(xué)習(xí)器預(yù)測(cè)類別標(biāo)記相同,則將該類別標(biāo)記作為集成后學(xué)習(xí)器的預(yù)測(cè)結(jié)果,否則拒絕預(yù)測(cè)。②相對(duì)多數(shù)投票在所有個(gè)體學(xué)習(xí)器預(yù)測(cè)結(jié)果中,若某類別標(biāo)記的票數(shù)最多,則將其作為集成后學(xué)習(xí)器的預(yù)測(cè)結(jié)果;若同時(shí)有多個(gè)類別標(biāo)記獲得最高票數(shù),則從中隨機(jī)選取一個(gè)類別標(biāo)記作為集成后學(xué)習(xí)器的預(yù)測(cè)結(jié)果。③加權(quán)投票根據(jù)不同個(gè)體分類器
預(yù)先設(shè)置的權(quán)重將相應(yīng)的結(jié)果(通常為概率值)進(jìn)行加權(quán)與累加,然后將結(jié)果最大者對(duì)應(yīng)的類別標(biāo)記作為集成后學(xué)習(xí)器的預(yù)測(cè)結(jié)果。15
13.1.2基礎(chǔ)方法(2)平均法平均法通常用于求取回歸或分類問題的概率,主要包括以下兩種:①普通平均將所有個(gè)體學(xué)習(xí)器的輸出結(jié)果的平均值作為集成后學(xué)習(xí)的預(yù)測(cè)結(jié)果。②加權(quán)平均根據(jù)不同個(gè)體分類器預(yù)先設(shè)置的權(quán)重將相應(yīng)概率進(jìn)行加權(quán)與累加,然后將結(jié)果最大者對(duì)應(yīng)的類別標(biāo)記作為集成后學(xué)習(xí)器的預(yù)測(cè)結(jié)果。16在Scikit-learn庫中,集成學(xué)習(xí)學(xué)習(xí)模塊的導(dǎo)入方法如下:fromsklearn.ensembleimportVotingClassifier#分類fromsklearn.ensembleimportVotingRegressor#回歸函數(shù)原型:VotingClassifier(estimators,
voting='hard',
weights=None)VotingRegressor(estimators,weights=None,n_jobs=None)17
13.1.2基礎(chǔ)方法18
13.1.2基礎(chǔ)方法名稱說明estimators個(gè)體學(xué)習(xí)器設(shè)置;格式為[('學(xué)習(xí)器標(biāo)示1',學(xué)習(xí)器模型1),...,('學(xué)習(xí)器標(biāo)示n',學(xué)習(xí)器n模型)],如estimators=[('log_model',log_model),('svm_model',svm_model),('dt_model',dt_model)]voting集成策略的選擇;設(shè)置為'hard'時(shí)為少數(shù)服從多數(shù),設(shè)置為'soft'時(shí)將所有個(gè)體學(xué)習(xí)器預(yù)測(cè)樣本所屬類別概率的平均值作為標(biāo)準(zhǔn)(最高平均值對(duì)應(yīng)的類型為最終的預(yù)測(cè)結(jié)果)weights設(shè)置權(quán)重序列以對(duì)個(gè)體學(xué)習(xí)器預(yù)測(cè)結(jié)果進(jìn)行加權(quán)平均(未設(shè)置時(shí)則使用均勻的權(quán)重)常用參數(shù)19
13.1.2基礎(chǔ)方法常用方法名稱說明fit(X,y)利用訓(xùn)練樣本(X與y分別為訓(xùn)練樣本相應(yīng)的特征與分類標(biāo)記)訓(xùn)練決策樹模型predict(X)預(yù)測(cè)測(cè)試樣本特征對(duì)應(yīng)的分類標(biāo)記predict_proba(X)預(yù)測(cè)測(cè)試樣本特征所屬類別的概率score(X,y)利用指定測(cè)試樣本(X與y分別為訓(xùn)練樣本相應(yīng)的特征與分類標(biāo)記)評(píng)估模型的平均準(zhǔn)確度集成學(xué)習(xí)旨在訓(xùn)練多個(gè)個(gè)體學(xué)習(xí)器并以特定策略將其進(jìn)行組合以產(chǎn)生比單個(gè)個(gè)體學(xué)習(xí)器性能優(yōu)越的強(qiáng)學(xué)習(xí)器。從理論上而言,只要個(gè)體學(xué)習(xí)器性能不比弱學(xué)習(xí)器差且不同個(gè)體學(xué)習(xí)器之間相互獨(dú)立,隨著個(gè)體學(xué)習(xí)器數(shù)目的增大,集成后的強(qiáng)學(xué)習(xí)器的錯(cuò)誤率將趨于零。然而,在實(shí)際中,不同個(gè)體學(xué)習(xí)器通常是利用同一個(gè)數(shù)據(jù)集訓(xùn)練而得的,很難保證其完全相互獨(dú)立;在此情況下,如何根據(jù)同一個(gè)數(shù)據(jù)集訓(xùn)練出具有“多樣性”與“準(zhǔn)確性”的個(gè)體學(xué)習(xí)器是提升最終集成效果的關(guān)鍵。20
13.1.3集成框架(1)Boosting集成學(xué)習(xí)框架Boosting是一種將弱學(xué)習(xí)器不斷提升為強(qiáng)學(xué)習(xí)器的同質(zhì)集成框架。21
13.1.3集成框架流程:首先根據(jù)初始訓(xùn)練樣本D1與相應(yīng)的權(quán)重W1訓(xùn)練初始基學(xué)習(xí)器H1,根據(jù)H1的錯(cuò)誤率E1更新訓(xùn)練樣本D2與相應(yīng)的權(quán)重W2,進(jìn)而利用訓(xùn)練樣本D2與相應(yīng)的權(quán)重W2訓(xùn)練下一個(gè)基學(xué)習(xí)器H2;最終,以上訓(xùn)練樣本權(quán)重調(diào)整與基學(xué)習(xí)器訓(xùn)練兩個(gè)過程不斷重復(fù)執(zhí)行直至滿足預(yù)設(shè)迭代收斂條件(如基學(xué)習(xí)器數(shù)目),而所生成的多個(gè)基學(xué)習(xí)器則通過特定的組合策略(如加權(quán)求和)構(gòu)成相應(yīng)的強(qiáng)學(xué)習(xí)器。需要注意的是,在基學(xué)習(xí)器生成的過程中,新基學(xué)習(xí)器的生成以上一個(gè)基學(xué)習(xí)器為基礎(chǔ),因而其間存在較強(qiáng)的依賴性。
22
Boosting集成學(xué)習(xí)框架13.1.3集成框架
23
Boosting集成學(xué)習(xí)框架13.1.3集成框架
Boosting集成學(xué)習(xí)框架基于Boosting框架的集成學(xué)習(xí)算法主要有AdaBoost、梯度提升樹(GradientBoostingTree)、XGBoost(eXtremeGradientBoosting)三種。①AdaBoostAdaBoost算法的關(guān)鍵在于樣本權(quán)重與弱分類器(或基于學(xué)習(xí)器)權(quán)重的更新,前者通過增大被錯(cuò)誤分類樣本的權(quán)重而降低被正確分類樣本的權(quán)重不斷調(diào)整樣本在構(gòu)造不同弱分類器中的作用,而后者則通過增大準(zhǔn)確率較高弱分類器的權(quán)重而降低準(zhǔn)確率較低弱分類器的權(quán)重提高集成分類器的整體性能。2413.1.3集成框架②梯度提升樹梯度提升樹是一種在Boosting框架下采用回歸決策樹構(gòu)建強(qiáng)學(xué)習(xí)器的算法;由于涉及梯度計(jì)算且回歸決策樹相應(yīng)數(shù)值加減具有特定的意義,因而,無論解決回歸問題還是分類問題,梯度提升樹均采用回歸決策樹(葉節(jié)點(diǎn)為數(shù)值而非類別標(biāo)記)作為基學(xué)習(xí)器。在此情況下,回歸決策樹的構(gòu)建依據(jù)將無法采用熵或基尼系數(shù)(適于分類決策樹),而是采用平方誤差
或均方差。25
Boosting集成學(xué)習(xí)框架13.1.3集成框架26
Boosting集成學(xué)習(xí)框架13.1.3集成框架
27
Boosting集成學(xué)習(xí)框架梯度提升樹是在回歸決策樹基礎(chǔ)上通過學(xué)習(xí)或擬合殘差的方式將多個(gè)回歸決策樹進(jìn)行集成以提高整體回歸或分類精度的算法,其中,殘差擬合或?qū)W習(xí)是構(gòu)建梯度提升樹的關(guān)鍵,其基本思想與日常年齡推斷例子較為類似。13.1.3集成框架例:某同學(xué)實(shí)際年齡為30歲,若以20歲進(jìn)行推斷(或擬合)則產(chǎn)生10歲的殘差,而若以6歲進(jìn)行推斷(或擬合)該殘差則產(chǎn)生4歲的殘差,第三次以3歲進(jìn)行推斷(或擬合)余下的殘差則產(chǎn)生僅1歲的殘差,如此類推則歲數(shù)殘差將持續(xù)減??;最后將每次推斷(或擬合)的歲數(shù)進(jìn)行累加后即生成最終推斷的結(jié)果。28
Boosting集成學(xué)習(xí)框架13.1.3集成框架
29
Boosting集成學(xué)習(xí)框架13.1.3集成框架
30
Boosting集成學(xué)習(xí)框架13.1.3集成框架根據(jù)上式可知,損失函數(shù)旨在鼓勵(lì)弱學(xué)習(xí)器及集成強(qiáng)學(xué)習(xí)器盡可能地?cái)M合訓(xùn)練樣本以使偏差最小化,正則化項(xiàng)旨在簡化弱學(xué)習(xí)器及集成強(qiáng)學(xué)習(xí)器的復(fù)雜度以使方差最小化(復(fù)雜度較低的模型在有限樣本上的表現(xiàn)隨機(jī)性更小,因而更穩(wěn)定或不易出現(xiàn)過擬合問題)。整體上,要使上式最小化,不但應(yīng)保證誤差要盡可能小,而且應(yīng)保證葉節(jié)點(diǎn)要盡可能少且節(jié)點(diǎn)權(quán)重不過于偏向較大值。31
Boosting集成學(xué)習(xí)框架13.1.3集成框架32Bagging集成學(xué)習(xí)框架13.1.3集成框架Bagging是BootstrapAggregating算法的縮寫,其中的Bootstrapping是一種自助采樣技術(shù),有放回的從原始數(shù)據(jù)集上創(chuàng)建觀察子集,子集的大小與原始集的大小相同。其基本思想在于:給定樣本集,隨機(jī)從中取出1個(gè)樣本放入采樣集,然后再將其放回原樣本集以使下次采樣時(shí)該樣本仍有可能被選中;如此經(jīng)過n次隨機(jī)采樣操作則可得到包含大小為n的采樣集(初始樣本集中部分樣本可能在采樣集中多次出現(xiàn)或從未出現(xiàn))。類似地可采樣獲得T個(gè)大小為n的采樣集,然后對(duì)每個(gè)采樣集進(jìn)行訓(xùn)練以獲得基學(xué)習(xí)器,進(jìn)而將基學(xué)習(xí)進(jìn)行集成(如投票法)而生成強(qiáng)學(xué)習(xí)器。通過“少數(shù)服從多數(shù)”的原則來確定最終的結(jié)果。33
Bagging集成學(xué)習(xí)框架13.1.3集成框架Bagging為獲得好的集成,同時(shí)希望個(gè)體學(xué)習(xí)器不能太差,使用相互有交疊的采樣子集?;蛘哒f是通過在樣本上產(chǎn)生多樣性,從而給予學(xué)習(xí)器之間獨(dú)立性。由于每個(gè)樣本被選中的概率相同,因此Bagging并不側(cè)重于訓(xùn)練數(shù)據(jù)集中的任何特定實(shí)例。34
Bagging集成學(xué)習(xí)框架13.1.3集成框架Bagging與Boosting的主要區(qū)別在于:①樣本選擇:Boosting每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個(gè)樣例在分類器中的權(quán)重發(fā)生變化,而權(quán)值是根據(jù)上一輪的分類結(jié)果進(jìn)行調(diào)整。Bagging訓(xùn)練集是在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。②樣例權(quán)值:Boosting根據(jù)錯(cuò)誤率不斷調(diào)整樣例的權(quán)值,錯(cuò)誤率越大則權(quán)重越大。Bagging使用均勻取樣,每個(gè)樣例的權(quán)重相等。③預(yù)測(cè)函數(shù):Boosting每個(gè)弱分類器都有相應(yīng)的權(quán)重,對(duì)于分類誤差小的分類器會(huì)有更大的權(quán)重。Bagging所有預(yù)測(cè)模型的權(quán)重相等。④計(jì)算方式:Boosting各個(gè)預(yù)測(cè)模型只能順序生成,因?yàn)楹笠粋€(gè)模型參數(shù)需要前一輪模型的結(jié)果。Bagging各個(gè)預(yù)測(cè)模型可以并行生成。35Stacking集成學(xué)習(xí)框架13.1.3集成框架與Boosting與Bagging等同質(zhì)集成框架不同,Stacking通過特定的學(xué)習(xí)器集成多種同構(gòu)或異構(gòu)的基學(xué)習(xí)器,是典型的基于“學(xué)習(xí)法”的重要集成框架。其基本原理在于:根據(jù)訓(xùn)練集訓(xùn)練出N個(gè)初級(jí)學(xué)習(xí)器(可為同構(gòu)基學(xué)習(xí)器或互不相同的異構(gòu)基學(xué)習(xí)器,如決策樹、神經(jīng)網(wǎng)絡(luò)等),然后以初級(jí)學(xué)習(xí)器的輸出作為特征輸入訓(xùn)練次級(jí)學(xué)習(xí)器(初始樣本的標(biāo)記仍被當(dāng)做是樣例標(biāo)記),進(jìn)而獲得最終的強(qiáng)學(xué)習(xí)器。36
Stacking集成學(xué)習(xí)框架13.1.3集成框架由于性能不同的初級(jí)學(xué)習(xí)器(如支持向量機(jī)、決策樹等)針對(duì)當(dāng)前問題或相關(guān)特征空間區(qū)域的側(cè)重點(diǎn)也不相同,因而可能產(chǎn)生不同程度的錯(cuò)誤,元學(xué)習(xí)器(或?qū)W習(xí)器的學(xué)習(xí)器)則可綜合不同初級(jí)學(xué)習(xí)器的學(xué)習(xí)行為以從中歸納出更深層次的學(xué)習(xí)規(guī)律,進(jìn)而糾正初級(jí)學(xué)習(xí)器的錯(cuò)誤以輸出正確的結(jié)果。37
Stacking集成學(xué)習(xí)框架13.1.3集成框架
38
Stacking集成學(xué)習(xí)框架13.1.3集成框架
根據(jù)以上步驟可知,Stacking框架融合了不同類型個(gè)體學(xué)習(xí)器(如支持向量機(jī)、K近鄰等)的特征表達(dá)能力并采用元學(xué)習(xí)器替換了Bagging與Boosting框架中的投票、平均等簡單的集成方法,有利于獲得誤差與方差均低的高性能學(xué)習(xí)器。Stacking集成學(xué)習(xí)框架在實(shí)際中,由于個(gè)體學(xué)習(xí)器已對(duì)輸入數(shù)據(jù)進(jìn)行了復(fù)雜的非線性變換或特征表達(dá),元學(xué)習(xí)器通常采用相對(duì)較簡單的個(gè)體學(xué)習(xí)器(如Logistic回歸)以避免過擬合問題的發(fā)生;此外,層次越多的Stacking框架雖然其特征表達(dá)能力越強(qiáng),但也易導(dǎo)致過擬合問題發(fā)生,通常采用兩層結(jié)構(gòu)的Stacking框架即可獲得較好的結(jié)果。3913.1.3集成框架Stacking集成學(xué)習(xí)框架在一定程度上,Stacking框架與深度神經(jīng)網(wǎng)絡(luò)非常類似,其元學(xué)習(xí)器相當(dāng)于深度神經(jīng)網(wǎng)絡(luò)中的輸出層,而其個(gè)體學(xué)習(xí)器則對(duì)應(yīng)于深度神經(jīng)網(wǎng)絡(luò)中的隱層,兩者均以特征表達(dá)為目的,卻也均具有不可解釋性的問題。此外,在數(shù)據(jù)量不足的情況下,以數(shù)據(jù)驅(qū)動(dòng)為基礎(chǔ)的深度神經(jīng)網(wǎng)絡(luò)可能無法應(yīng)用,而Stacking框架則可能獲得較好的結(jié)果。4013.1.3集成框架13.2.1基礎(chǔ)方法利用加權(quán)投票集成方式對(duì)樣本進(jìn)行分類。(1)問題描述利用鳶尾花數(shù)據(jù)集實(shí)現(xiàn)不同分類器的加權(quán)投票集成,具體要求如下。①采用投票方式集成決策樹、K近鄰與支持向量機(jī)三種分類器并將相應(yīng)的權(quán)重設(shè)置為0.2、0.1與0.7。②對(duì)個(gè)體分類器與集成分類器的分類結(jié)果進(jìn)行可視化。4113.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法1.導(dǎo)入庫importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫fromitertoolsimportproduct
#導(dǎo)入迭代器處理模塊fromsklearnimportdatasets#導(dǎo)入數(shù)據(jù)集fromsklearn.treeimportDecisionTreeClassifier#導(dǎo)入決策樹分類模塊fromsklearn.neighborsimportKNeighborsClassifier#導(dǎo)入K近鄰分類模塊fromsklearn.svmimportSVC#導(dǎo)入支持向量機(jī)模塊fromsklearn.ensembleimportVotingClassifier#導(dǎo)入分類學(xué)習(xí)器模塊fromsklearn.inspectionimportDecisionBoundaryDisplay#導(dǎo)入決策邊界顯示模塊fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模塊4213.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法2.訓(xùn)練分類器#加載數(shù)據(jù)集iris=datasets.load_iris()x=iris.data[:,[0,2]]y=iris.targetx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=13)#訓(xùn)練分類器dt_model=DecisionTreeClassifier(max_depth=4).fit(x_train,y_train)#決策樹kn_model=KNeighborsClassifier(n_neighbors=7).fit(x_train,y_train)#K近鄰svm_model=SVC(gamma=0.1,kernel="rbf",probability=True).fit(x_train,y_train)#支持向量機(jī)4313.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法3.集成學(xué)習(xí)(加權(quán)投票)vc_model=VotingClassifier(estimators=[("dt",dt_model),("knn",kn_model),("svc",svm_model)],voting="soft",weights=[0.2,0.1,0.7],)vc_model.fit(x_train,y_train)4413.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法4.繪制決策邊界dt_score=format(dt_model.score(x_test,y_test),'.2f')kn_score=format(kn_model.score(x_test,y_test),'.2f')svm_score=format(svm_model.score(x_test,y_test),'.2f')vc_score=format(vc_model.score(x_test,y_test),'.2f')f,axarr=plt.subplots(2,2,sharex="col",sharey="row",figsize=(10,8))4513.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法forix,model,nameinzip(product([0,1],[0,1]),[dt_model,kn_model,svm_model,vc_model],['Decision_Tree(depth=4)'+'Accuracy:'+str(dt_score),'KNN(k=7)'+'Accuracy:'+str(kn_score),'SVM(kernel="rbf")'+'Accuracy:'+str(svm_score),'Voting(Weight=(0.2,0.1,0.7))'+'Accuracy:'+str(vc_score)],):DecisionBoundaryDisplay.from_estimator(model,x,alpha=0.4,ax=axarr[ix[0],ix[1]],response_method="predict")axarr[ix[0],ix[1]].scatter(x[:,0],x[:,1],c=y,s=20,edgecolor="k")axarr[ix[0],ix[1]].set_title(name)plt.show()4613.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法在此例中,支持向量機(jī)與K近鄰精度稍高于決策樹,而投票式集成學(xué)習(xí)根據(jù)預(yù)設(shè)權(quán)重突出了支持向量機(jī)的性能,因而最終的精度不低于支持向量機(jī)。4713.2應(yīng)用實(shí)例13.2.1基礎(chǔ)方法利用回歸器集成方式對(duì)糖尿病進(jìn)行預(yù)測(cè)。(1)問題描述利用集成學(xué)習(xí)回歸方式對(duì)Scikit-learn庫糖尿病數(shù)據(jù)進(jìn)行分析,具體要求如下。①利用投票集成學(xué)習(xí)方式集成線性回歸、隨機(jī)森林與梯度提升等個(gè)體回歸器
。②比較個(gè)體回歸器與集成回歸器擬合優(yōu)度(R2分?jǐn)?shù))。③對(duì)個(gè)體回歸器與集成回歸器的預(yù)測(cè)結(jié)果進(jìn)行可視化。
4813.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法1.導(dǎo)入庫importmatplotlib.pyplotasplt
#導(dǎo)入繪圖庫fromsklearn.ensembleimportGradientBoostingRegressor#導(dǎo)入梯度增強(qiáng)模塊fromsklearn.ensembleimportRandomForestRegressor#導(dǎo)入隨機(jī)森林模塊fromsklearn.linear_modelimportLinearRegression#導(dǎo)入線性回歸模塊fromsklearn.ensembleimportVotingRegressor#導(dǎo)入集成學(xué)習(xí)模塊fromsklearn.datasetsimportload_diabetes#導(dǎo)入糖尿病數(shù)據(jù)庫fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模型fromsklearn.metricsimportr2_score#判定系數(shù)4913.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法2.加載并劃分?jǐn)?shù)據(jù)#加載糖尿病數(shù)據(jù)diabetes=load_diabetes()x=diabetes.datay=diabetes.target#將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)5013.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法3.訓(xùn)練個(gè)體學(xué)習(xí)器#構(gòu)建個(gè)體學(xué)習(xí)器GB=GradientBoostingRegressor()RF=RandomForestRegressor()LR=LinearRegression()#個(gè)體學(xué)習(xí)器訓(xùn)練GB.fit(x_train,y_train)RF.fit(x_train,y_train)LR.fit(x_train,y_train)5113.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法4.集成學(xué)習(xí)#利用投票方式對(duì)個(gè)體學(xué)習(xí)器進(jìn)行集成EL=VotingRegressor([("gb",GB),("rf",RF),("lr",LR)])#集成學(xué)習(xí)器訓(xùn)練EL.fit(x_train,y_train)#個(gè)體學(xué)習(xí)器與集成學(xué)習(xí)器測(cè)試xt=x_test[:20]#選擇20個(gè)樣本GB_Pred=GB.predict(xt)RF_Pred=RF.predict(xt)LR_Pred=LR.predict(xt)EL_Pred=EL.predict(xt)5213.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法#顯示評(píng)價(jià)指標(biāo)值A(chǔ)CC=[]ACC.append(r2_score(y_test[:20],GB_Pred))ACC.append(r2_score(y_test[:20],RF_Pred))ACC.append(r2_score(y_test[:20],LR_Pred))ACC.append(r2_score(y_test[:20],EL_Pred))#顯示對(duì)比結(jié)果plt.figure(1)label=['GradientBoostingRegressor','RandomForestRegressor','LinearRegression','VotingRegressor']plt.bar(range(4),height=ACC,color=['r','g','b','c'],tick_label=label,width=0.4)plt.xlabel('Method')plt.ylabel('Accuracy')forxx,yyinzip(range(4),ACC):plt.text(xx,yy,format(yy,'.2f'),ha='center',fontsize=10)plt.grid(True)plt.show()5313.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法5.可視化結(jié)果plt.figure(2)plt.plot(y_test[:20],'ko',label='Ground_Truth')plt.plot(GB_Pred,'gd',label='GradientBoostingRegressor')plt.plot(RF_Pred,'b^',label='RandomForestRegressor')plt.plot(LR_Pred,'ys',label='LinearRegression')plt.plot(EL_Pred,'r*',ms=10,label='VotingRegressor')plt.tick_params(axis="x",which='both',bottom=False,top=False,labelbottom=False)plt.ylabel('Predicted_Values')plt.xlabel('Testingsamples')plt.legend(loc='best')plt.grid(True)plt.show()5413.2應(yīng)用實(shí)例
13.2.1基礎(chǔ)方法投票與平均等基礎(chǔ)集成方法不但適用于普通個(gè)體學(xué)習(xí)器(如支持向量機(jī)、線性回歸等)的集成,而且也適于集成學(xué)習(xí)器(如隨機(jī)森林、梯度增強(qiáng)等)集成。如上圖可知,隨機(jī)森林與梯度提升等集成學(xué)習(xí)器比線性回歸器的擬合精度要高,而將三者融合后的精度不低于單個(gè)回歸器的精度。5513.2應(yīng)用實(shí)例
13.2.2AdaBoost基于Boosting框架的集成學(xué)習(xí)算法主要有AdaBoost與梯度提升樹兩種。Scikit-learn庫包含用于分類與回歸的AdaBoost模塊,其引入方法如下。fromsklearn.ensembleimportAdaBoostClassifierfromsklearn.ensembleimportAdaBoostRegressor函數(shù)原型如下。AdaBoostClassifier(base_estimator=None,n_estimators=50,learning_rate=1.0,algorithm=’SAMME.R’,random_state=None)AdaBoostRegressor(base_estimator=None,n_estimators=50,learning_rate=1.0,loss=’linear’,random_state=None)5613.2應(yīng)用實(shí)例
13.2.2AdaBoost5713.2應(yīng)用實(shí)例名稱說明base_estimator弱分類或回歸學(xué)習(xí)器,通常為CART決策樹或者神經(jīng)網(wǎng)絡(luò)MLP(默認(rèn)為決策樹)algorithmAdaboost分類算法有SAMME和SAMME.R兩種(默認(rèn)為SAMME.R),由于SAMME.R使用概率度量的連續(xù)值,迭代效率一般比SAMME高,因此默認(rèn)使用SAMME.Rloss損失度量包括線性linear(默認(rèn))、平方square和指數(shù)exponential三種n_estimators弱學(xué)習(xí)器的最大個(gè)數(shù)(默認(rèn)為50);值太小容易欠擬合,太大容易過擬合learning_rate每個(gè)弱學(xué)習(xí)器的權(quán)重縮減系數(shù)(或?qū)W習(xí)率),取值范圍為[0,1](默認(rèn)為1)random_state控制每次boosting迭代中在每個(gè)弱學(xué)習(xí)器處的隨機(jī)種子常用參數(shù)13.2.2AdaBoost利用AdaBoost分類器對(duì)復(fù)雜分布形態(tài)數(shù)據(jù)進(jìn)行分類。(1)問題描述首先利用make_gaussian_quantiles方法生成仿真實(shí)驗(yàn)數(shù)據(jù),然后構(gòu)建AdaBoost分類器實(shí)現(xiàn)樣本分類,具體要求如下。①在相同條件下比較SAMME.R與SAMME兩種算法的收斂速度。②繪制樣本分類邊界。
5813.2應(yīng)用實(shí)例
13.2.2AdaBoost1.導(dǎo)入庫fromsklearn.ensembleimportAdaBoostClassifier#導(dǎo)入AdaBoost分類器模塊fromsklearn.treeimportDecisionTreeClassifier#導(dǎo)入分類決策樹模塊importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫importmatplotlibasmplimportnumpyasnp#導(dǎo)入科學(xué)計(jì)算庫fromsklearn.metricsimportaccuracy_scorefromsklearn.datasetsimportmake_gaussian_quantilesfromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模型5913.2應(yīng)用實(shí)例
13.2.2AdaBoost2.構(gòu)建AdaBoost分類器(SAMME.R)#構(gòu)建多類別數(shù)據(jù)x,y=make_gaussian_quantiles(mean=(1,1),cov=2.0,n_samples=1000,n_features=2,n_classes=3,random_state=1)#將數(shù)據(jù)劃分為訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)#構(gòu)建AdaBoost分類器(SAMME.R)ABC_SR=AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),n_estimators=300,learning_rate=1)ABC_SR.fit(x_train,y_train)6013.2應(yīng)用實(shí)例
13.2.2AdaBoost3.構(gòu)建AdaBoost分類器(SAMME)ABC_S=AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),n_estimators=300,learning_rate=1.5,algorithm="SAMME")ABC_S.fit(x_train,y_train)#計(jì)算誤差A(yù)BC_SR_ERR=[]ABC_S_ERR=[]forABC_SR_predict,ABC_S_predictinzip(ABC_SR.staged_predict(x_test),ABC_S.staged_predict(x_test)):ABC_SR_ERR.append(1.0-accuracy_score(ABC_SR_predict,y_test))ABC_S_ERR.append(1.0-accuracy_score(ABC_S_predict,y_test))6113.2應(yīng)用實(shí)例
13.2.2AdaBoost4.繪制誤差變化曲線plt.figure(2)plt.plot(range(len(ABC_S_ERR)),ABC_S_ERR,"b
",label="SAMME",alpha=0.5)plt.plot(range(len(ABC_SR_ERR)),ABC_SR_ERR,"r",label="SAMME.R",alpha=0.5)plt.ylabel('Error')plt.xlabel('NumberofTrees')plt.legend(loc='best')plt.grid(True)plt.show()6213.2應(yīng)用實(shí)例
13.2.2AdaBoost本例采用make_gaussian_quantiles函數(shù)生成不同類別的樣本相交嵌套的樣本,其分類難度較高。事實(shí)上,如左圖所示,AdaBoost分類器仍能表現(xiàn)較好的性能。對(duì)于AdaBoost分類器模型的求解方法,SAMME根據(jù)分類器的準(zhǔn)確性進(jìn)行加權(quán),要求基分類器的輸出是離散的,而SAMME.R則通過使用預(yù)測(cè)類別的概率信息來進(jìn)行加權(quán),允許基分類器的輸出是實(shí)數(shù)值的概率。如右圖所示,SAMME.R算法通常比SAMME收斂得更快且穩(wěn)定性較高。6313.2應(yīng)用實(shí)例13.2.2AdaBoost利用AdaBoost回歸器進(jìn)行曲線擬合。(1)問題描述首先利用正弦曲線生成仿真實(shí)驗(yàn)數(shù)據(jù),然后構(gòu)建AdaBoost回歸器進(jìn)行回歸分析并測(cè)試其在不同數(shù)量基學(xué)習(xí)器時(shí)的精度;具體要求如下。①比較不同基學(xué)習(xí)器時(shí)AdaBoost回歸器的擬合優(yōu)度。②對(duì)不同基學(xué)習(xí)器時(shí)AdaBoost回歸器生成的曲線進(jìn)行可視化。
6413.2應(yīng)用實(shí)例
13.2.2AdaBoost1.導(dǎo)入庫fromsklearn.ensembleimportAdaBoostRegressor#導(dǎo)入AdaBoost回歸模塊importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫importnumpyasnp#導(dǎo)入科學(xué)計(jì)算庫fromsklearn.metricsimportr2_score#r2分?jǐn)?shù)6513.2應(yīng)用實(shí)例
13.2.2AdaBoost2.構(gòu)造數(shù)據(jù)x=np.linspace(0,10,200)x=x.reshape(-1,1)y=np.sin(x).ravel()+np.random.normal(0,0.1,x.shape[0])6613.2應(yīng)用實(shí)例
13.2.2AdaBoost3.測(cè)試不同數(shù)量基學(xué)習(xí)器時(shí)AdaBoost回歸器擬合效果AB_R2=[]foriinrange(10):AB=AdaBoostRegressor(n_estimators=(i+1)*10,random_state=0)AB.fit(x,y)AB_R2.append(r2_score(y,AB.predict(x)))6713.2應(yīng)用實(shí)例
13.2.2AdaBoost4.集成不同數(shù)量個(gè)體回歸器的擬合效果#1個(gè)個(gè)體學(xué)習(xí)器集成AB_1=AdaBoostRegressor(n_estimators=1,random_state=0)AB_1.fit(x,y)y_1=AB_1.predict(x)#100個(gè)個(gè)體學(xué)習(xí)器集成AB_2=AdaBoostRegressor(n_estimators=100,random_state=0)AB_2.fit(x,y)y_2=AB_2.predict(x)6813.2應(yīng)用實(shí)例
13.2.2AdaBoost根據(jù)左圖所示結(jié)果可知,隨著基學(xué)習(xí)器數(shù)量的增加,AdaBoost回歸器的擬合優(yōu)度也隨之增加,表明曲線擬合效果越好。然而,需要注意的是,當(dāng)基學(xué)習(xí)器數(shù)量較大時(shí),AdaBoost回歸器模型復(fù)雜度較高,則易導(dǎo)致過擬合問題的發(fā)生(嘗試擬合所有樣本),相應(yīng)的曲線可能由于較大噪聲或異常樣本而出現(xiàn)較大的偏差。此外,由于AdaBoost算法通過增大錯(cuò)分樣本權(quán)重的方式突出其在弱學(xué)習(xí)器訓(xùn)練中的作用,因而易導(dǎo)致噪聲或異常樣本的權(quán)重過大,進(jìn)而導(dǎo)致其穩(wěn)定性可能受到較大的影響。如右圖所示,較少數(shù)量的基學(xué)習(xí)器由于欠擬合問題而不易生成較好的曲線,適度數(shù)量的基學(xué)習(xí)器則可生成較好的結(jié)果。6913.2應(yīng)用實(shí)例
13.2.3梯度提升樹梯度提升樹在損失函數(shù)負(fù)梯度的基礎(chǔ)上通過逐步擬合殘差的方式訓(xùn)練基學(xué)習(xí)器,由于梯度值是連續(xù)值,因而在構(gòu)建梯度提升樹解決回歸或分類任務(wù)時(shí),相應(yīng)的基學(xué)習(xí)器均為CART回歸樹。在具體應(yīng)用中,可通過正則化方法(如學(xué)習(xí)率、子采樣等)可以控制模型的復(fù)雜度以在一定程度上避免過擬合問題的發(fā)生。Scikit-learn庫中梯度提升樹模塊的導(dǎo)入方式如下。fromsklearn.ensembleimportGradientBoostingClassifierfromsklearn.ensembleimportGradientBoostingRegressor函數(shù)原型如下。sklearn.ensemble.GradientBoostingClassifier(loss='deviance',learning_rate=0.1,n_estimators=100,max_depth=3,warm_start=False)sklearn.ensemble.GradientBoostingRegressor(loss='is',learning_rate=0.1,n_estimators=100,max_depth=3,warm_start=False)7013.2應(yīng)用實(shí)例
13.2.3梯度提升樹7113.2應(yīng)用實(shí)例名稱說明n_estimators弱學(xué)習(xí)器數(shù)量loss損失函數(shù)。對(duì)于分類模型,可設(shè)置為deviance(似然損失函數(shù))與exponential(指數(shù)損失函數(shù));對(duì)于回歸模型,可設(shè)置為is(均方差)、lad(絕對(duì)損失)、huber(huber損失)與quantile(分位數(shù)損失)learning_rate步長或?qū)W習(xí)率(默認(rèn)為0.1)max_depth決策樹的最大深度(默認(rèn)為3)常用參數(shù)13.2.3梯度提升樹利用“早期停止”控制梯度提升樹迭代次數(shù)。在梯度提升樹中,可以采用“早期停止”確定最少的迭代次數(shù)。“早期停止”是一種可在模型訓(xùn)練過程中監(jiān)測(cè)模型性能的技術(shù),其在模型性能不再改善時(shí)停止模型的訓(xùn)練,從而避免過擬合問題的發(fā)生。在此過程中,通常利用驗(yàn)證集計(jì)算每次迭代后模型的性能指標(biāo)(如誤差),如果性能不再改善,則停止訓(xùn)練,進(jìn)而確定最佳的迭代次數(shù)。(1)問題描述利用鳶尾花數(shù)據(jù)集、乳腺癌與Hastie數(shù)據(jù)集確定梯度提升樹的最少的迭代次數(shù),具體要求如下。①采用“早期停止”方式確定模型的精度與訓(xùn)練時(shí)間。②在未采用“早期停止”的情況確定模型的精度與訓(xùn)練時(shí)間。③利用柱狀圖比較采用與未采用“早期停止”時(shí)模型精度與訓(xùn)練時(shí)間。7213.2應(yīng)用實(shí)例
13.2.3梯度提升樹1.導(dǎo)入庫fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模塊importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫importnumpyasnp#導(dǎo)入科學(xué)計(jì)算庫importtime#導(dǎo)入時(shí)間模塊fromsklearn.ensembleimportGradientBoostingClassifier#導(dǎo)入梯度提升樹分類器模塊fromsklearnimportdatasets#導(dǎo)入數(shù)據(jù)集7313.2應(yīng)用實(shí)例
13.2.3梯度提升樹2.構(gòu)建梯度提升樹[非早停]#GB=GradientBoostingClassifier(n_estimators=n_estimators,random_state=0)start=time.time()GB.fit(x_train,y_train)Time_GB.append(time.time()-start)Acc_GB.append(GB.score(x_test,y_test))Num_GB.append(GB.n_estimators_)7413.2應(yīng)用實(shí)例
13.2.3梯度提升樹3.構(gòu)建梯度提升樹[早停]GBES=GradientBoostingClassifier(n_estimators=n_estimators,validation_fraction=0.2,n_iter_no_change=5,tol=0.01,random_state=0)#validation_fraction=0.2是指在訓(xùn)練過程中將訓(xùn)練數(shù)據(jù)的20%作為驗(yàn)證數(shù)據(jù)以用于模型性能的評(píng)估;n_iter_no_change=5是指如果在連續(xù)5次迭代中模型的性能沒有提升則停止模型的訓(xùn)練。
start=time.time()GBES.fit(x_train,y_train)Time_GBES.append(time.time()-start)Acc_GBES.append(GBES.score(x_test,y_test))Num_GBES.append(GBES.n_estimators_)7513.2應(yīng)用實(shí)例
13.2.3梯度提升樹4.梯度提升樹非早停與早停兩種情況下的精度對(duì)比bar_width=0.4index=np.arange(0,len(data_list))plt.figure(figsize=(8,4))Bar_GB=plt.bar(index,Acc_GB,bar_width,label='Withoutearlystopping',color='blue')fori,binenumerate(Bar_GB):plt.text(b.get_x()+b.get_width()/2.0,b.get_height(),'n_est=%d'%Num_GB[i],ha='center',va='bottom')Bar_GBES=plt.bar(index+bar_width,Acc_GBES,bar_width,label='Withearlystopping',color='cyan')fori,binenumerate(Bar_GBES):plt.text(b.get_x()+b.get_width()/2.0,b.get_height(),"n_est=%d"%Num_GBES[i],ha="center",va="bottom")plt.xticks(index+bar_width,data_names)plt.yticks(np.arange(0,1.2,0.1))plt.ylim([0,1.2])7613.2應(yīng)用實(shí)例
13.2.3梯度提升樹5.梯度提升樹非早停與早停兩種情況下的時(shí)間對(duì)比plt.figure(figsize=(8,4))Bar_GB=plt.bar(index,Time_GB,bar_width,label='Withoutearlystopping',color='blue')fori,binenumerate(Bar_GB):plt.text(b.get_x()+b.get_width()/2.0,b.get_height(),'n_est=%d'%Num_GB[i],ha='center',va='bottom')Bar_GBES=plt.bar(index+bar_width,Time_GBES,bar_width,label='Withearlystopping',color='cyan')fori,binenumerate(Bar_GBES):plt.text(b.get_x()+b.get_width()/2.0,b.get_height(),'n_est=%d'%Num_GBES[i],ha='center',va="bottom")max_time=np.amax(np.maximum(Time_GB,Time_GBES))plt.xticks(index+bar_width,data_names)plt.yticks(np.linspace(0,max_time,10))plt.ylim([0,max_time])7713.2應(yīng)用實(shí)例
13.2.3梯度提升樹根據(jù)實(shí)驗(yàn)結(jié)果表明,如上圖所示,在模型訓(xùn)練過程中,采用“早期停止”時(shí)模型訓(xùn)練時(shí)間明顯低于未采用“早期停止”時(shí)的模型訓(xùn)練時(shí)間。此外,采用“早期停止”時(shí)由于有效控制了模型的復(fù)雜度,進(jìn)而采用較少的基分類器構(gòu)建梯度提升樹,因而相應(yīng)的精度也高于未采用“早期停止”時(shí)梯度提升樹的精度。7813.2應(yīng)用實(shí)例13.2.3梯度提升樹利用梯度提升樹回歸器解決糖尿病預(yù)測(cè)。梯度提升樹不但可用于求解分類問題,而且可用于求解回歸問題或?qū)μ卣鞯闹匾赃M(jìn)行評(píng)估。本例以糖尿病預(yù)測(cè)模型構(gòu)建為例介紹其在回歸問題求解中的應(yīng)用方法。(1)問題描述構(gòu)建梯度提升樹回歸器以對(duì)糖尿病進(jìn)行預(yù)測(cè),具體要求如下。①輸出模型訓(xùn)練時(shí)每次迭代訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)相應(yīng)的誤差并繪制相應(yīng)的變化曲線。②對(duì)特征重要性進(jìn)行評(píng)估并可視化。7913.2應(yīng)用實(shí)例
13.2.3梯度提升樹1.導(dǎo)入庫fromsklearn.ensembleimportGradientBoostingRegressor#導(dǎo)入梯度提升樹回歸模塊importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫importnumpyasnp#導(dǎo)入科學(xué)計(jì)算庫fromsklearnimportdatasets#導(dǎo)入數(shù)據(jù)庫fromsklearn.inspectionimportpermutation_importance#導(dǎo)入特征重要性評(píng)估模塊fromsklearn.metricsimportmean_squared_error#導(dǎo)入均方差評(píng)價(jià)指標(biāo)模塊fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模塊8013.2應(yīng)用實(shí)例
13.2.3梯度提升樹2.訓(xùn)練梯度提升樹回歸模型#構(gòu)建數(shù)據(jù)集diabetes=datasets.load_diabetes()x,y=diabetes.data,diabetes.target#數(shù)據(jù)處理x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.1,random_state=13)#構(gòu)建梯度提升樹回歸模型params={'n_estimators':500,'max_depth':4,'min_samples_split':5,'learning_rate':0.01,'loss':'squared_error'}GBR=GradientBoostingRegressor(**params)#訓(xùn)練梯度提升樹回歸模型GBR.fit(x_train,y_train)8113.2應(yīng)用實(shí)例
13.2.3梯度提升樹3.訓(xùn)練偏差#計(jì)算與輸出梯度提升樹回歸模型相應(yīng)的均方差MSE=mean_squared_error(y_test,GBR.predict(x_test))print('Meansquarederror(MSE):{:.4f}'.format(MSE))#訓(xùn)練偏差(staged_predict函數(shù)用于返回每個(gè)訓(xùn)練輪次的預(yù)測(cè)結(jié)果)test_score=np.zeros((params['n_estimators'],),dtype=np.float64)fori,y_predinenumerate(GBR.staged_predict(x_test)):test_score[i]=mean_squared_error(y_test,y_pred)8213.2應(yīng)用實(shí)例
13.2.3梯度提升樹4.特征重要性可視化#基于不純度的特征重要性feature_importance=GBR.feature_importances_sorted_idx=np.argsort(feature_importance)pos=np.arange(sorted_idx.shape[0])+0.5plt.figure(2)plt.barh(pos,feature_importance[sorted_idx],align='center')plt.yticks(pos,np.array(diabetes.feature_names)[sorted_idx])#特征重要性(排列)plt.figure(3)PI=permutation_importance(GBR,x_test,y_test,n_repeats=10,random_state=42,n_jobs=2)sorted_idx=PI.importances_mean.argsort()plt.boxplot(PI.importances[sorted_idx].T,vert=False,labels=np.array(diabetes.feature_names)[sorted_idx])plt.show()8313.2應(yīng)用實(shí)例
13.2.3梯度提升樹8413.2應(yīng)用實(shí)例均方差變化隨著迭代次數(shù)的增加,梯度提升樹的擬合誤差逐漸降低;其中,針對(duì)測(cè)試數(shù)據(jù)的擬合誤差在開始階段不斷降低,之后則趨于平穩(wěn),表明模型的性能達(dá)到一定程度時(shí)不再明顯提升,此時(shí)可通過“早期停止”方式提前結(jié)束模型的訓(xùn)練。
13.2.3梯度提升樹8513.2應(yīng)用實(shí)例特征重要性(不純度)特征重要性(排列)對(duì)于特征重要性分析,梯度提升性的生成結(jié)果與基于隨機(jī)排列的特征重要性分析方法生成的結(jié)果較為相近(如三個(gè)最重要的特征均為bmi、s5與bp)。事實(shí)上,樹模型依據(jù)不純度的下降判斷特征重要性,而出現(xiàn)過擬合問題時(shí),其結(jié)果可靠性可能會(huì)受到一定的影響;此外,樹模型更利用數(shù)值型特征而不利于高基數(shù)類別特征,因而,數(shù)值型特征在重要性排名上更可能靠前。相對(duì)而言,基于隨機(jī)排列的特征重要性分析方法與模型無關(guān),適用性更廣。需要注意的是,如果特征具有較強(qiáng)的多重共線性,通常只從中選擇一個(gè)重要的特征。
13.2.4XGBoostXGBoost是經(jīng)過優(yōu)化的分布式梯度提升庫,具有高效、靈活、可移植較高(可在Hadoop、MPI、Dask等多種分布式環(huán)境上運(yùn)行)等優(yōu)勢(shì)。XGBoost在解決工業(yè)界大規(guī)模數(shù)據(jù)分析及Kaggle數(shù)據(jù)挖掘競(jìng)賽中應(yīng)用較廣。在應(yīng)用XGBoost算法時(shí),應(yīng)首先安裝XGBoost庫,然后導(dǎo)入相應(yīng)的分類或回歸模塊,即:fromxgboost.sklearnimportXGBClassifierfromxgboost.sklearnimportXGBRegressor函數(shù)原型如下。XGBClassifier/XGBRegressor(max_depth=3,learning_rate=0.1,n_estimators=100,objective='binary:logistic')8613.2應(yīng)用實(shí)例
13.2.4XGBoost8713.2應(yīng)用實(shí)例名稱說明n_estimators基學(xué)習(xí)器的數(shù)量learning_rate學(xué)習(xí)率(默認(rèn)值為0.3)max_depth構(gòu)建樹的深度(默認(rèn)值為6)objective需要被最小化的損失函數(shù)常用參數(shù)13.2.4XGBoost利用XGBoost分類器對(duì)乳腺癌預(yù)測(cè)。(1)問題描述利用乳腺癌數(shù)據(jù)構(gòu)建XGBoost分類器以實(shí)現(xiàn)乳腺癌病癥的預(yù)測(cè),具體要求如下。①通過直接設(shè)置基學(xué)習(xí)器數(shù)的方式構(gòu)建XGBoost分類器。②通過交叉驗(yàn)證的方式確定最優(yōu)參數(shù)并構(gòu)建相應(yīng)的XGBoost分類器。③對(duì)比以上兩種方式構(gòu)建的XGBoost分類器之間的精度與訓(xùn)練時(shí)間差異。④繪制XGBoost分類器相應(yīng)的AUC曲線。⑤對(duì)特征重要性進(jìn)行可視化。8813.2應(yīng)用實(shí)例
13.2.4XGBoost1.導(dǎo)入庫importnumpyasnpfromsklearn.datasetsimportload_breast_cancer#導(dǎo)入數(shù)據(jù)庫fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入數(shù)據(jù)劃分模塊importxgboostasxgb#導(dǎo)入xgboost庫fromxgboost.sklearnimportXGBClassifier#導(dǎo)入XGBoost分類模塊importmatplotlib.pyplotasplt#導(dǎo)入繪圖庫fromsklearn.metricsimportroc_auc_score#導(dǎo)入評(píng)價(jià)指標(biāo)模塊fromsklearn.metricsimportroc_curvefromxgboostimportplot_importance#導(dǎo)入特征重要性繪制模塊importtime#導(dǎo)入時(shí)間模塊8913.2應(yīng)用實(shí)例
13.2.4XGBoost2.加載數(shù)據(jù)Cancer=load_breast_cancer()x=Cancer.data#特征值y=Cancer.target#目標(biāo)值x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_state=1)Acc_XGB_1=[]Acc_XGB_2=[]Time_XGB=[]9013.2應(yīng)用實(shí)例
13.2.4XGBoost3.通過直接設(shè)置基學(xué)習(xí)器數(shù)的方式構(gòu)建XGBoost分類器params={'n_estimators':300,'num_class':2,'booster':'gbtree','objective':'multi:softmax','max_depth':5,'colsample_bytree':0.75,'min_child_weight':1,'max_delta_step':0,'seed':0,'gamma':0.15,'learning_rate':0.01}XGB=XGBClassifier(**params)start=time.time()XGB.fit(x_train,y_train,eval_set=[(x_train,y_train),(x_test,y_test)])Time_XGB.append(time.time()-start)9113.2應(yīng)用實(shí)例
13.2.4XGBoost4.通過交叉驗(yàn)證的方式確定最優(yōu)參數(shù)并構(gòu)建相應(yīng)的XGBoost分類器dtrain=xgb.DMatrix(x,label=y)xgb_param=XGB.get_xgb_params()XGB_CV=xgb.cv(xgb_param,dtrain,num_boost_round=5000,nfold=3,metrics=['auc'],early_stopping_rounds=10,stratified=True)#更新基學(xué)習(xí)器數(shù)并重新訓(xùn)練xgboost分類器XGB.set_params(n_estimators=XGB_CV.shape[0])start=time.time()XGB.fit(x_train,y_train,eval_set=[(x_train,y_train),(x_test,y_test)])Time_XGB.append(time.time()-start)9213.2應(yīng)用實(shí)例
13.2.4XGBoost5.繪制AUC曲線fpr,tpr,T=roc_curve(y_test,XGB.predict(x_test))auc_score=roc_auc_score(y_test,XGB.predict(x_test))plt.plot(fpr,tpr,label=f'AUC={auc_score:.4f}')plt.plot([0,1],[0,1],linestyle='--',color='r',label='RandomClassifier')plt.xlabel('FalsePositiveRate')plt.ylabel('TruePositiveRate')plt.legend()plt.grid(True)plt.show()9313.2應(yīng)用實(shí)例
13.2.4XGBoost利用最優(yōu)基學(xué)習(xí)器數(shù)(16)構(gòu)建的XGBoost分類器模型訓(xùn)練時(shí)間明顯低于指定基學(xué)習(xí)器數(shù)(300)相應(yīng)的XGBoost分類器模型訓(xùn)練時(shí)間,而兩者對(duì)應(yīng)評(píng)估指標(biāo)值基本相同。9413.2應(yīng)用實(shí)例不同基學(xué)習(xí)器訓(xùn)練時(shí)間差異不同基學(xué)習(xí)器評(píng)估指標(biāo)差異
13.2.4XGBoost根據(jù)左圖所示的AUC曲線可知,最終的XGBoost分類器模型整體性能較高。此外,如右圖所示,XGBoost分類器可用于評(píng)估特征重要性。9513.2應(yīng)用實(shí)例AUC曲線特征重要性
13.2.5隨機(jī)森林Bagging框架的代表算法為隨機(jī)森林,其在以決策樹作為基學(xué)習(xí)器的基礎(chǔ)上進(jìn)一步在基學(xué)習(xí)器的訓(xùn)練中引入隨機(jī)屬性選擇機(jī)制以進(jìn)一步提高基學(xué)習(xí)器的多樣性與獨(dú)立性。具體而言,構(gòu)建基學(xué)習(xí)器時(shí),對(duì)于其每個(gè)節(jié)點(diǎn),首先從屬性集合(包含d個(gè)屬性)中通過隨機(jī)選擇的方式生成一個(gè)包含k≤d個(gè)屬性(通常將k值設(shè)置為log_2?d)的屬性子集,再從此屬性子集中選擇一個(gè)最優(yōu)屬性用于構(gòu)造該節(jié)點(diǎn)相應(yīng)的樣本分類判別依據(jù)或函數(shù)。9613.2應(yīng)用實(shí)例
13.2.5隨機(jī)森林隨機(jī)森林算法的基本步驟如下。第一步:在初始樣本集的基礎(chǔ)上利用隨機(jī)采樣技術(shù)創(chuàng)建多個(gè)采樣集。第二步:利用每個(gè)采樣集構(gòu)造基學(xué)習(xí)器,其中的節(jié)點(diǎn)最優(yōu)判別函數(shù)利用隨機(jī)選擇屬性子集確定。第三步:通過特定的組合策略對(duì)所有基學(xué)習(xí)器進(jìn)行集成以生成最終的強(qiáng)學(xué)習(xí)器。隨機(jī)森林的原理雖然很簡單且易于實(shí)現(xiàn),但在實(shí)際性能卻很好。一般情況下,其初始誤差比較大,隨著基學(xué)習(xí)器數(shù)量的增加,最終效果通常會(huì)有很大的提高。9713.2應(yīng)用實(shí)例
13.2.5隨機(jī)森林Scikit-learn庫包含隨機(jī)森林分類與回歸器模塊,其導(dǎo)入方式如下。fromsklearn.ensembleimportRandomForestClassifierfromsklearn.ensembleimportRandomForestRegressor函數(shù)原型如下。RandomForestClassifier(n_estimators=100,criterion='gini',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=’auto’,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,bootstrap=True,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False,class_weight=None)RandomForestReg
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 業(yè)務(wù)提成合同范本模板
- 修繕合同屬于合同范本
- 中途參股合同范本
- 公司 房產(chǎn)轉(zhuǎn)讓合同范本
- 制作交通標(biāo)識(shí)標(biāo)牌合同范本
- 交換機(jī)采購合同范本
- 義烏商品房合同范例
- 買賣車轉(zhuǎn)讓合同范本
- 會(huì)展公司招商合同范本
- 辦公家具買賣合同范本
- 水土保持各種分級(jí)標(biāo)準(zhǔn)表與指標(biāo)
- Unit 1 How tall are you B Read and write(課堂PPT)
- 最新部編版九年級(jí)語文下冊(cè) 12《詞四首》課后習(xí)題參考答案
- 部編版四年級(jí)語文下冊(cè)27《巨人的花園》PPT課件(共2課時(shí))
- 測(cè)繪項(xiàng)目收費(fèi)標(biāo)準(zhǔn)2009
- 新人教版六年級(jí)下冊(cè)科學(xué)全冊(cè)教學(xué)設(shè)計(jì)教案
- 《成本會(huì)計(jì)學(xué)》習(xí)題集及答案
- 社區(qū)醫(yī)院建設(shè)標(biāo)準(zhǔn)
- 個(gè)人所得稅稅率表【自動(dòng)提取稅率計(jì)算】
- 浙美版小學(xué)美術(shù)五年級(jí)下冊(cè)課件1畫家故居
- 中國作家協(xié)會(huì)入會(huì)申請(qǐng)表
評(píng)論
0/150
提交評(píng)論