機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語(yǔ)言實(shí)現(xiàn) 課件 第6、7章 弱學(xué)習(xí)器集成算法、支持向量機(jī)_第1頁(yè)
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語(yǔ)言實(shí)現(xiàn) 課件 第6、7章 弱學(xué)習(xí)器集成算法、支持向量機(jī)_第2頁(yè)
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語(yǔ)言實(shí)現(xiàn) 課件 第6、7章 弱學(xué)習(xí)器集成算法、支持向量機(jī)_第3頁(yè)
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語(yǔ)言實(shí)現(xiàn) 課件 第6、7章 弱學(xué)習(xí)器集成算法、支持向量機(jī)_第4頁(yè)
機(jī)器學(xué)習(xí)簡(jiǎn)明教程-基于Python語(yǔ)言實(shí)現(xiàn) 課件 第6、7章 弱學(xué)習(xí)器集成算法、支持向量機(jī)_第5頁(yè)
已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

弱學(xué)習(xí)器集成算法《機(jī)器學(xué)習(xí)簡(jiǎn)明教程》高延增侯躍恩羅志堅(jiān)機(jī)械工業(yè)出版社06本章目標(biāo)?了解三種常用的弱學(xué)習(xí)器集成方法?理解GBDT算法?掌握XGBoost算法的使用英文Boost有增加、提升的意思,機(jī)器學(xué)習(xí)中Boost的意思是將多個(gè)較弱的算法集成在一起形成更強(qiáng)的算法。以決策樹(shù)為例,單棵決策樹(shù)學(xué)習(xí)易于實(shí)現(xiàn)和解釋,但單棵樹(shù)的效果往往不理想,就可以考慮通過(guò)改變學(xué)習(xí)過(guò)程中的權(quán)重等方法生成多棵隨機(jī)樹(shù)再組成隨機(jī)森林,來(lái)對(duì)算法能力進(jìn)行提升(Boosting)。近幾年,在Kaggle、阿里云天池等數(shù)據(jù)挖掘競(jìng)賽中XGBoost算法特別受參賽選手青睞,取得過(guò)不俗戰(zhàn)績(jī)。XGBoost是Boost算法家族中的一員,它是GBDT(GradientBoostedDecisionTree,梯度提升決策樹(shù))的一種高效實(shí)現(xiàn),是本章的重點(diǎn)內(nèi)容。本章在講解Boosting、AdaBoost、XGBT等算法基礎(chǔ)上,詳細(xì)介紹XGBoost的算法原理和特點(diǎn),并通過(guò)一個(gè)實(shí)際案例講解XGBoost的應(yīng)用方法。目錄/Contents6.16.2三種常用的弱學(xué)習(xí)器集成方法AdaBoost與GBDT6.3XGBoost6.1三種常用的弱學(xué)習(xí)器集成方法集成學(xué)習(xí)的思路是通過(guò)訓(xùn)練樣本集訓(xùn)練出多個(gè)(弱)學(xué)習(xí)器,然后將這些弱學(xué)習(xí)器集成為一個(gè)更強(qiáng)的學(xué)習(xí)器(1)由訓(xùn)練集訓(xùn)練出多個(gè)弱學(xué)習(xí)器;(2)將多個(gè)弱學(xué)習(xí)器集成為一個(gè)強(qiáng)學(xué)習(xí)器。6.1三種常用的弱學(xué)習(xí)器集成方法弱學(xué)習(xí)器和強(qiáng)學(xué)習(xí)器分別是什么意思呢?以分類器為例,弱學(xué)習(xí)器和強(qiáng)學(xué)習(xí)器的區(qū)別主要是通過(guò)學(xué)習(xí)后對(duì)分類結(jié)果的正確率,如果僅略高于隨機(jī)猜測(cè)的正確率則為弱學(xué)習(xí)器,如果分類的正確率很高則為強(qiáng)學(xué)習(xí)器。在多個(gè)弱學(xué)習(xí)器的訓(xùn)練階段,訓(xùn)練集較大時(shí)可以將訓(xùn)練集分成若干子集分別訓(xùn)練生成弱學(xué)習(xí)器然后再集成;當(dāng)訓(xùn)練集較小時(shí)也可以進(jìn)行有放回的抽取進(jìn)行模型訓(xùn)練得到多個(gè)弱學(xué)習(xí)器再集成。被集成的多個(gè)弱學(xué)習(xí)器,可能是同一種算法只是訓(xùn)練參數(shù)不同而生成的,像這樣的多個(gè)弱學(xué)習(xí)器被稱為是“同質(zhì)”的。如果被用來(lái)集成的是不同學(xué)習(xí)算法訓(xùn)練生成的弱學(xué)習(xí)器被稱為“異質(zhì)”的。集成方法不特指某一種具體的機(jī)器學(xué)習(xí)算法,而是訓(xùn)練多個(gè)模型然后再以什么樣的方法將它們集成在一起。常見(jiàn)的方法有三種:Bagging(裝袋法)、Boosting(提升法)、Stacking(堆疊法)。6.1三種常用的弱學(xué)習(xí)器集成方法——裝袋法Bagging是Bootstrapaggregating(引導(dǎo)聚集算法)的縮寫(xiě),集成算法初始階段會(huì)通過(guò)有放回隨機(jī)采樣(裝袋法名字的由來(lái))的方式創(chuàng)建K個(gè)數(shù)據(jù)集;由這K個(gè)子訓(xùn)練集訓(xùn)練出K個(gè)模型,生成這K個(gè)模型的具體算法不做限制;然后將得到的K個(gè)弱學(xué)習(xí)器模型整合成一個(gè)強(qiáng)學(xué)習(xí)器模型。Bagging算法提升效果的本質(zhì)是人為引入樣本擾動(dòng),通過(guò)增加樣本隨機(jī)性,達(dá)到降低方差的效果,避免過(guò)擬合發(fā)生。Bagging算法過(guò)程示意

6.1三種常用的弱學(xué)習(xí)器集成方法——提升法初始階段,Boosting對(duì)于樣本的采樣邏輯與Bagging算法一致。但是Boosting的K個(gè)弱學(xué)習(xí)器并不是同時(shí)訓(xùn)練的,而是串行訓(xùn)練的,當(dāng)前弱學(xué)習(xí)器的效果會(huì)用來(lái)更新下一個(gè)弱學(xué)習(xí)器的學(xué)習(xí)權(quán)重,當(dāng)全部訓(xùn)練完成后再將所得到的所有弱學(xué)習(xí)器集成。Boosting算法的基本思想有兩個(gè)重點(diǎn):(1)提高那些在前一輪被弱分類器錯(cuò)誤分類的樣例的權(quán)值,減小前一輪被正確分類的樣本的權(quán)值,讓被錯(cuò)誤分類的樣本在后續(xù)受到更多的關(guān)注;(2)使用一定策略將弱分類器進(jìn)行組合,比如AdaBoost通過(guò)加權(quán)多數(shù)表決的方式,即增大錯(cuò)誤率小的分類器的權(quán)值,同時(shí)減小錯(cuò)誤率較大的分類器的權(quán)值。6.1三種常用的弱學(xué)習(xí)器集成方法——堆疊法

Stacking訓(xùn)練M1過(guò)程6.1三種常用的弱學(xué)習(xí)器集成方法——堆疊法類似M1的方法訓(xùn)練另外三個(gè)初級(jí)學(xué)習(xí)器,就得到了次級(jí)學(xué)習(xí)器M的訓(xùn)練集上所有樣本點(diǎn)的對(duì)應(yīng)的特征,如圖:Stacking次級(jí)學(xué)習(xí)器M的訓(xùn)練與測(cè)試集構(gòu)成示意(1)訓(xùn)練各個(gè)初級(jí)學(xué)習(xí)器,使用初級(jí)學(xué)習(xí)器對(duì)驗(yàn)證子集的預(yù)測(cè)結(jié)果作為次級(jí)學(xué)習(xí)器的特征、驗(yàn)證子集的實(shí)際標(biāo)簽值作為Y值得到次級(jí)學(xué)習(xí)器的訓(xùn)練樣本集;(2)使用各個(gè)初級(jí)學(xué)習(xí)器對(duì)測(cè)試集的預(yù)測(cè)作為特征,測(cè)試集的實(shí)際標(biāo)簽作為Y得到次級(jí)學(xué)習(xí)器的測(cè)試集;(3)訓(xùn)練并測(cè)試次級(jí)學(xué)習(xí)器。目錄/Contents6.16.2三種常用的弱學(xué)習(xí)器集成方法AdaBoost與GBDT6.3XGBoost6.2AdaBoost與GBDT——AdaBoostAdaboost是Boosting算法的一種,是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的弱學(xué)習(xí)器,然后把這些弱學(xué)習(xí)器集合起來(lái),構(gòu)成一個(gè)強(qiáng)學(xué)習(xí)器。一個(gè)簡(jiǎn)單的AdaBoost集成算法示例。首先,原始訓(xùn)練集得到一個(gè)弱學(xué)習(xí)器M1;然后,M1在原始訓(xùn)練集中錯(cuò)誤標(biāo)記的點(diǎn)在下一次訓(xùn)練時(shí)得到加權(quán),訓(xùn)練得到弱學(xué)習(xí)器M2;再然后,將M2標(biāo)記錯(cuò)誤的點(diǎn)繼續(xù)加權(quán),用加權(quán)后的訓(xùn)練集得到弱學(xué)習(xí)器M3;最后,將M1、M2、M3各自乘以一個(gè)系數(shù)后再相加得到組合后的強(qiáng)學(xué)習(xí)器M。AdaBoost是一種自適應(yīng)算法,每次由訓(xùn)練集生成一個(gè)弱學(xué)習(xí)器后都會(huì)根據(jù)當(dāng)前弱學(xué)習(xí)器的表現(xiàn)對(duì)訓(xùn)練集重新進(jìn)行調(diào)整,由調(diào)整后的訓(xùn)練集生成一個(gè)新的弱學(xué)習(xí)器。6.2AdaBoost與GBDT——AdaBoost

類似的,AdaBoost算法生成強(qiáng)學(xué)習(xí)器有兩個(gè)主要問(wèn)題需要解決:(1)弱學(xué)習(xí)器迭代訓(xùn)練過(guò)程中,樣本點(diǎn)的權(quán)重更新方法;(2)最后生成的各個(gè)弱學(xué)習(xí)器如何集成到一起。6.2AdaBoost與GBDT——AdaBoost以左圖分類任務(wù)為例,訓(xùn)練集中樣本點(diǎn)當(dāng)次訓(xùn)練的權(quán)重值和上一次訓(xùn)練生成的弱分類器有沒(méi)有對(duì)這個(gè)點(diǎn)正確分類有關(guān),如果分類正確則權(quán)重降低、如果分類錯(cuò)誤則權(quán)重提升。具體的,訓(xùn)練第一個(gè)弱分類器時(shí)每個(gè)點(diǎn)的權(quán)重都是一樣的,權(quán)值分布如式:

6.2AdaBoost與GBDT——AdaBoost

AdaBoost有多種集成方式,使用最簡(jiǎn)單的線性組合來(lái)理解AdaBoost的算法原理。即最終的強(qiáng)分類器由所有弱分類器線性組合而成,如式

6.2AdaBoost與GBDT——AdaBoost(6.3)(6.4)(6.5)AdaBoost在訓(xùn)練過(guò)程中“關(guān)注”被錯(cuò)分的樣本,而在最后合成強(qiáng)分類器時(shí)分類誤差率越小的弱分類器“話語(yǔ)權(quán)”越大。另外,AdaBoost提供的是一種算法框架,弱分類器的構(gòu)建方法不唯一;整個(gè)算法過(guò)程清晰,可以選用簡(jiǎn)單、易解釋的弱分類器。6.2AdaBoost與GBDT——AdaBoostAdaBoost有多種集成方式,我們使用最簡(jiǎn)單的線性組合來(lái)理解AdaBoost的算法原理。即最終的強(qiáng)分類器由所有弱分類器線性組合而成,如下式:

由AdaBoost算法思想可知,AdaBoost在訓(xùn)練過(guò)程中“關(guān)注”被錯(cuò)分的樣本,而在最后合成強(qiáng)分類器時(shí)分類誤差率越小的弱分類器“話語(yǔ)權(quán)”越大。另外,AdaBoost提供的是一種算法框架,弱分類器的構(gòu)建方法不唯一;整個(gè)算法過(guò)程清晰,可以選用簡(jiǎn)單、易解釋的弱分類器。6.2AdaBoost與GBDT——GBDTGBDT包含梯度提升(GradientBoosting,GB)和決策樹(shù)(DecisionTree,DT)兩部分,也就是說(shuō)GBDT是一種梯度提升(GB)算法,由于這種梯度提升算法的弱學(xué)習(xí)器采用的是決策樹(shù)因此被稱為梯度提升決策樹(shù)(GradientBoostingDecisionTree)算法。

(6.7)損失函數(shù)(6.7)求解最小值并不容易,而GBDT中的GB就是解決此問(wèn)題的。GradientBoosting(GB)算法由Freidman提出,它是一個(gè)算法框架,與傳統(tǒng)Boosting的區(qū)別是,每一次的計(jì)算是為了減少上一次的殘差(residual),而為了消除殘差,可以在殘差減少的梯度(Gradient)方向上建立一個(gè)新的模型,這樣就可以對(duì)當(dāng)前模型的一般損失函數(shù)(6.7)的殘差進(jìn)行近似。第t輪的第i個(gè)樣本的損失函數(shù)的負(fù)梯度近似如式(6.8)。(6.8)6.2AdaBoost與GBDT——GBDT利用式(6.8),在每一個(gè)樣本點(diǎn)上都有與它的特征向量xi對(duì)應(yīng)的一個(gè)近似值rti,這樣在第t-1棵回歸樹(shù)的基礎(chǔ)上可以擬合出第t棵回歸樹(shù),對(duì)應(yīng)的葉節(jié)點(diǎn)區(qū)域記為Rtj,j=1,…,J,J為葉節(jié)點(diǎn)的個(gè)數(shù)。也就是說(shuō),根據(jù)xi,rti,i=1,…,N算法擬合一個(gè)新決策樹(shù)減少上一輪得到的強(qiáng)學(xué)習(xí)器的擬合誤差,然后和上一輪強(qiáng)學(xué)習(xí)器疊加構(gòu)成本輪的強(qiáng)學(xué)習(xí)器。舉個(gè)例子來(lái)加深理解,比如我有一個(gè)里面裝了10個(gè)乒乓球的黑盒子,讓你猜里面有多少個(gè)乒乓球,你第一次猜5,我說(shuō)少了,你會(huì)在5的基礎(chǔ)上加上一個(gè)數(shù)(比如7);那你第二次猜的是5+7=12,這個(gè)時(shí)候我說(shuō)多了,你會(huì)再減一些,在達(dá)到最多嘗試次數(shù)之前,你的猜測(cè)會(huì)越來(lái)越接近正確答案。GB算法的原理與此類似,而GBDT算法是先使用一顆CART樹(shù)對(duì)訓(xùn)練結(jié)果進(jìn)行擬合,然后用第二棵樹(shù)去擬合第一棵樹(shù)的殘差(用負(fù)梯度近似這個(gè)殘差),以此類推。左表所示GBDT算法是用于解決回歸問(wèn)題的,GBDT的分類算法與之相似,只是用于分類的GBDT樣本輸出不是連續(xù)的值,而是離散的類別,導(dǎo)致我們無(wú)法直接從輸出類別去擬合類別輸出的誤差。有兩個(gè)方法可以解決這一問(wèn)題:(1)使用指數(shù)損失函數(shù),這時(shí)的GBDT就變成了前面講的Adaboost算法;(2)用類似于邏輯回歸的對(duì)數(shù)似然損失函數(shù),也就是使用類別的預(yù)測(cè)概率值和真實(shí)概率值的差來(lái)擬合損失。6.2AdaBoost與GBDT——GBDT如果算法在訓(xùn)練集上一味追求誤差函數(shù)的最小化,則容易造成過(guò)擬合。為防止過(guò)擬合的發(fā)生,需要對(duì)算法進(jìn)行正則化。一種較簡(jiǎn)單的正則化方式為在式(6.7)中疊加弱學(xué)習(xí)器的時(shí)候乘以一個(gè)懲罰因子,變成如式(6.9)所示。式中,0<ν≤1.

還可以通過(guò)對(duì)最后的決策樹(shù)進(jìn)行剪枝處理來(lái)防止過(guò)擬合。目錄/Contents6.16.2三種常用的弱學(xué)習(xí)器集成方法AdaBoost與GBDT6.3XGBoost6.3XGBoostXGBoost(ExtremeGradientBoosting)是指極致的提升算法,可以看成是GBDT的升級(jí)版,和AdaBoost、GBDT一樣都屬于Boosting算法的一種。XGBoost在2016年由陳天奇提出,因其高效、靈活和輕便的特點(diǎn),XGBoost在很多數(shù)據(jù)挖掘領(lǐng)域都有廣泛使用。在很多應(yīng)用場(chǎng)景下,XGBoost相對(duì)其它機(jī)器學(xué)習(xí)算法來(lái)說(shuō)更加可靠、靈活、準(zhǔn)確。算法作者開(kāi)源了代碼,原生支持R、Python、Julia等計(jì)算機(jī)語(yǔ)言,是目前最好、最快的開(kāi)源提升樹(shù)(BoostingTree)工具包,因此在各類數(shù)據(jù)挖掘比賽中也經(jīng)??梢钥吹絏GBoost的身影。6.3XGBoost——核心思想作為升級(jí)版GBDT,XGBoost在算法設(shè)計(jì)、樣本集處理、決策樹(shù)節(jié)點(diǎn)分裂等方面都做出了很大改進(jìn)。算法層面,XGBoost有以下特點(diǎn):(1)本質(zhì)上仍然是一個(gè)Boosting提升算法;(2)XGBoost通過(guò)在集成過(guò)程中就引入正則化項(xiàng)來(lái)防止算法過(guò)擬合;(3)使用二階泰勒展開(kāi)式近似損失函數(shù),這樣可以兼容一般形式的損失函數(shù),同時(shí)二階導(dǎo)數(shù)項(xiàng)可以使梯度在更準(zhǔn)確的方向上更快下降。XGBoost在本質(zhì)上還是Boosting算法,在這點(diǎn)上和GBDT相似。6.3XGBoost——核心思想以決策樹(shù)作為弱學(xué)習(xí)器為例,Boosting算法解決預(yù)測(cè)問(wèn)題思路可以用下面兩張圖解釋:

將左上圖訓(xùn)練得到的兩棵決策樹(shù)用于實(shí)際預(yù)測(cè)時(shí),會(huì)將測(cè)試樣本分別輸入兩棵樹(shù)得到兩個(gè)值,而最終的取值是綜合衡量這兩個(gè)值的結(jié)果。例如,我們?cè)跊Q定是否購(gòu)買(mǎi)一款手機(jī)的時(shí)候,可以構(gòu)建性能指標(biāo)、外觀指標(biāo)的兩顆決策樹(shù),然后將待選的手機(jī)型號(hào)輸入到構(gòu)建的兩顆決策樹(shù)中得到兩個(gè)推薦值,然后綜合這兩個(gè)推薦值看這款手機(jī)值不值得購(gòu)買(mǎi)。6.3XGBoost——核心思想

(6.10)

6.3XGBoost——核心思想抑制過(guò)擬合的一個(gè)有效方法是加入正則化項(xiàng),所謂正則化就是在損失函數(shù)的基礎(chǔ)上加入一個(gè)模型復(fù)雜度的懲罰項(xiàng)作為優(yōu)化的目標(biāo)函數(shù),

在XGBoost中,L(Θ)是反映預(yù)測(cè)值與實(shí)際值之間差異的函數(shù),ΩΘ反映的是對(duì)模型復(fù)雜程度的懲罰。上式的基本思想是,當(dāng)模型變得復(fù)雜時(shí)會(huì)使L(Θ)減小,但同時(shí)會(huì)讓?duì)?Θ)增加,為了使Obj(Θ)取得最小值,模型不能僅為了L(Θ)變小而過(guò)于復(fù)雜,即保證算法不會(huì)過(guò)擬合。

T為葉節(jié)點(diǎn)的個(gè)數(shù)、ωj為第j個(gè)葉節(jié)點(diǎn)的取值。上式的含義是葉節(jié)點(diǎn)的個(gè)數(shù)越多則決策樹(shù)越復(fù)雜,所有葉子節(jié)點(diǎn)取值的平方和越大決策樹(shù)越復(fù)雜。上式形式不唯一,我們?cè)谡嬲褂脮r(shí)可以根據(jù)實(shí)際需要進(jìn)行更改,比如將決策樹(shù)的度、層數(shù)等指標(biāo)作為衡量決策樹(shù)復(fù)雜度的依據(jù)。

6.3XGBoost——核心思想

6.3XGBoost——核心思想

第t輪的目標(biāo)函數(shù)變?yōu)椋旱绻麚p失函數(shù)不是使用的殘差平方和,而是一般的函數(shù)該怎么辦呢?XGBoost給出的解決方案是使用二階泰勒展開(kāi)式進(jìn)行近似6.3XGBoost——決策樹(shù)生長(zhǎng)算法

節(jié)點(diǎn)分裂的目的是使目標(biāo)函數(shù)取得更小的值,用分裂前的目標(biāo)函數(shù)減去分裂后的目標(biāo)函數(shù)得到此次分裂的增益Gain,

6.3XGBoost——決策樹(shù)生長(zhǎng)算法輸入:當(dāng)前節(jié)點(diǎn)的所有樣本點(diǎn),樣本的所有特征輸出:節(jié)點(diǎn)最優(yōu)分裂方案計(jì)算當(dāng)前節(jié)點(diǎn)的目標(biāo)函數(shù)值;對(duì)于每一個(gè)特征:按特征值大小進(jìn)行排序;對(duì)于該特征的所有可能的分裂值:計(jì)算該分裂值的增益;找出每個(gè)特征的最優(yōu)分裂值;找出所有特征中的最優(yōu)分裂特征及其最優(yōu)分裂值作為輸出尋找最優(yōu)分裂值的精確算法精確算法每次進(jìn)行分裂嘗試都要遍歷一遍全部候選分割點(diǎn),當(dāng)數(shù)據(jù)量過(guò)大導(dǎo)致內(nèi)存無(wú)法一次載入或者在分布式情況下,此算法的效率就很低。還有一種近似算法可以加快分裂速度,對(duì)于每個(gè)特征只考察分位點(diǎn),減少計(jì)算復(fù)雜度,對(duì)于所有特征:對(duì)于所有樣本點(diǎn)按特征進(jìn)行排序;按照百分位對(duì)排序好的樣本進(jìn)行塊存儲(chǔ);塊存儲(chǔ)的結(jié)構(gòu)作為后續(xù)決策樹(shù)或分裂節(jié)點(diǎn)的可能的候選分裂值;在每個(gè)特征的候選分裂值中找出最優(yōu);找出最優(yōu)分裂特征。6.3XGBoost——決策樹(shù)生長(zhǎng)算法近似算法在計(jì)算最優(yōu)分裂值時(shí)減少了對(duì)每個(gè)特征的掃描次數(shù),對(duì)于每個(gè)特征都只在候選值中選擇分裂值,減少了運(yùn)算次數(shù)。另外預(yù)先排序好的樣本是按塊存儲(chǔ)的,因此可以支持并行運(yùn)算。另外,算法學(xué)習(xí)過(guò)程中決策樹(shù)不能無(wú)限生長(zhǎng),必須指定它停止分裂的條件。一般有幾種方案:(1)當(dāng)節(jié)點(diǎn)分裂的增益Gain<0時(shí),放棄分裂;(2)當(dāng)樹(shù)的深度大于設(shè)定閾值停止分裂;(3)當(dāng)分裂后左右葉節(jié)點(diǎn)中的最小樣本數(shù)低于設(shè)定閾值停止分裂。引入一次新的分裂會(huì)帶來(lái)一定的增益,當(dāng)損失函數(shù)的減少不足以彌補(bǔ)模型復(fù)雜度增加帶來(lái)的過(guò)擬合風(fēng)險(xiǎn)時(shí)停止分裂。另外,由于樹(shù)的深度太深也容易導(dǎo)致學(xué)習(xí)局部樣本出現(xiàn)過(guò)擬合,所以會(huì)設(shè)置樹(shù)的最大深度。決策樹(shù)停止生長(zhǎng)的條件(3)規(guī)定當(dāng)一個(gè)葉節(jié)點(diǎn)包含的樣本數(shù)量太少也會(huì)放棄分裂以防止樹(shù)分的太細(xì),也屬于防止過(guò)擬合的一種措施,常用于樣本數(shù)量的量級(jí)非常大的情況。6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析波士頓房?jī)r(jià)數(shù)據(jù)集包含美國(guó)人口普查局收集的美國(guó)馬薩諸塞州波士頓住房?jī)r(jià)格的有關(guān)信息,數(shù)據(jù)集有506個(gè)案例。數(shù)據(jù)集包含13個(gè)解釋變量:(1)CRIM犯罪率,(2)ZN住宅用地所占比例,(3)INDUS城鎮(zhèn)中非住宅用地所占比例,(4)CHAS是否穿過(guò)查爾斯河,(5)NOX氮氧化污染物,(6)RM每棟住宅的房間數(shù),(7)GE1940年以前建成的自住單位的比例,(8)DIS距離5個(gè)波士頓的就業(yè)中心的加權(quán)距離,(9)RAD距離高速公路的便利指數(shù),(10)TAX每一萬(wàn)美元的不動(dòng)產(chǎn)稅率,(11)PRTATIO城鎮(zhèn)中的教師學(xué)生比例,(12)B城鎮(zhèn)中的黑人比例,(13)LSTAT低收入群比例。數(shù)據(jù)集中只包含1個(gè)目標(biāo)變量:房屋的價(jià)格PRICE。使用Python語(yǔ)言開(kāi)發(fā),在sklearns包中datasets數(shù)據(jù)集,引入(import)并調(diào)用其中的load_boston函數(shù)就可以加載波士頓房?jī)r(jià)的數(shù)據(jù)集。加載后是一個(gè)字典類型的數(shù)據(jù)集,解釋變量、目標(biāo)變量、列頭都存放在不同的鍵中,需要將這些數(shù)據(jù)取出組成一個(gè)DataFrame格式便于后續(xù)使用,處理后的數(shù)據(jù)樣式如下:6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析以房屋價(jià)格Price為縱軸,以各個(gè)解釋變量為橫軸,繪制散點(diǎn)圖,結(jié)果如下圖。從圖中看出,房屋價(jià)格與各個(gè)因素都有一定的關(guān)系,但是比較難用常見(jiàn)的回歸分析方法預(yù)測(cè),考慮使用XGBoost方法

6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析在Python語(yǔ)言中使用XGBoost進(jìn)行數(shù)據(jù)分析較為簡(jiǎn)單,直接安裝xgboost包即可使用。XGBoost的Python模塊支持多種數(shù)據(jù)輸入格式,可支持處理線性回歸、邏輯回歸、二分類、多分類等問(wèn)題,還可自定義目標(biāo)函數(shù)。在選定要處理的問(wèn)題類型后,通過(guò)逐步調(diào)整XGBoost的參數(shù)可以得到適用于所處理問(wèn)題的模型。XGBoost模型的參數(shù)主要有三類:(1)通用參數(shù),這類參數(shù)一般使用默認(rèn)值,不需要調(diào)整;(2)學(xué)習(xí)目標(biāo)參數(shù),這些參數(shù)與任務(wù)類型有關(guān),在起始階段定下來(lái)后通常也不需要再調(diào)整;(3)booster參數(shù):弱學(xué)習(xí)器相關(guān)參數(shù),需要仔細(xì)調(diào)整以提高模型的性能。在實(shí)際應(yīng)用中,比較重要的XGBoost參數(shù)如下表所示。本案例,使用XGBRegressor進(jìn)行模型構(gòu)建。參數(shù)名稱XGBClassifierXGBRegressorobjective字符串或者可調(diào)用對(duì)象,損失函數(shù),默認(rèn)binary:logistic。損失函數(shù),默認(rèn)binary:linear。n_estimators整數(shù),子模型的數(shù)量,默認(rèn)為100。booster字符串,給定模型的求解方式,默認(rèn)gbtree;可選參數(shù):gbtree、gblinear、dart。n_jobs整數(shù),指定了并行度,即開(kāi)啟多少個(gè)線程來(lái)訓(xùn)練。如果為-1,則使用所有的CPU。max_depth整數(shù),表示子樹(shù)的最大深度。learning_rate浮點(diǎn)數(shù),默認(rèn)0.1,表示學(xué)習(xí)率即每一步迭代的步長(zhǎng)。太大運(yùn)行準(zhǔn)確率不高,太小運(yùn)行速度慢。reg_alpha浮點(diǎn)數(shù),是L1正則化系數(shù)。reg_lambda浮點(diǎn)數(shù),是L2正則化系數(shù)。6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析然后,按照4:1的比例將數(shù)據(jù)集拆分成訓(xùn)練集和測(cè)試集,在對(duì)模型進(jìn)行訓(xùn)練,使用得到的模型進(jìn)行預(yù)測(cè),預(yù)測(cè)值與實(shí)際值的比較如下圖6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析XGBoost還提供plot_importance接口查看各解釋變量對(duì)目標(biāo)變量的貢獻(xiàn)度,如下圖6.3XGBoost——案例利用XGBoost對(duì)波士頓房?jī)r(jià)數(shù)據(jù)進(jìn)行回歸分析對(duì)于XGBoost中子模型可以調(diào)用包中的plot_tree接口繪制子模型(子樹(shù)),部分結(jié)果如下圖本章小結(jié)本節(jié)介紹的提升算法可以通過(guò)一定的規(guī)則生成一些弱學(xué)習(xí)器然后再進(jìn)行有機(jī)結(jié)合達(dá)到強(qiáng)學(xué)習(xí)器的效果,著重介紹了Boosting算法中的XGBoost。如果不考慮深度學(xué)習(xí),XGBoost是在各種數(shù)據(jù)挖掘競(jìng)賽中獲獎(jiǎng)最多的算法,讀者不可不知。除了算法本身,XGBoost還在工程實(shí)現(xiàn)上做了大量的優(yōu)化。例如,特征值預(yù)排序后存儲(chǔ)在內(nèi)存塊中,按經(jīng)驗(yàn)推薦可能的分裂點(diǎn),實(shí)現(xiàn)快速近似最優(yōu)分裂值選??;通過(guò)設(shè)計(jì)巧妙的缺失值處理方案提升效率等。在集成算法實(shí)際使用時(shí),大多機(jī)器學(xué)習(xí)開(kāi)發(fā)語(yǔ)言都有對(duì)應(yīng)的工具包,讀者在使用過(guò)程中可以參考對(duì)應(yīng)的官方文,而只有在真正理解了算法基本原理才能發(fā)揮算法的更大優(yōu)勢(shì)。謝謝支持向量機(jī)《機(jī)器學(xué)習(xí)簡(jiǎn)明教程》高延增侯躍恩羅志堅(jiān)機(jī)械工業(yè)出版社07本章目標(biāo)?理解線性可分、間隔最大化的概念?理解對(duì)偶問(wèn)題?掌握線性支持向量機(jī)?了解非線性支持向量機(jī)支持向量機(jī)(SupportVectorMachine,SVM)是一種非常優(yōu)雅的算法,具有完善的數(shù)學(xué)理論支撐,早在1963年就由Vapnik提出了,直到20世紀(jì)末才被廣泛使用。在深度學(xué)習(xí)算法流行之前,SVM一直是傳統(tǒng)機(jī)器學(xué)習(xí)算法的典型代表,在模式識(shí)別、回歸、分類等領(lǐng)域得到廣泛應(yīng)用,一度被業(yè)界稱為最成功的機(jī)器學(xué)習(xí)算法。SVM是一種有監(jiān)督的二分類模型,目前在小樣本、非線性、高維場(chǎng)景下依然表現(xiàn)亮眼,并且該算法數(shù)學(xué)理論完備,是數(shù)據(jù)挖掘從業(yè)者必須掌握的算法之一。SVM的核心思想是在對(duì)樣本空間分類的時(shí)候使用間隔最大化的分類器,而最讓人稱奇的問(wèn)題解決思路是將低維度上線性不可分的樣本擴(kuò)展到多維空間中,然后就可以在多維空間中構(gòu)建一個(gè)線性分類器將這些樣本分開(kāi),同時(shí)使用核技巧降低這一過(guò)程的計(jì)算復(fù)雜度。SVM實(shí)現(xiàn)樣本分類過(guò)程中涉及到線性可分、間隔最大化、核技巧等知識(shí),本章將分別介紹。目錄/Contents7.17.2SVM相關(guān)概念線性SVM7.3非線性SVM7.4軟間隔7.5應(yīng)用案例7.1SVM的相關(guān)概念

7.1SVM的相關(guān)概念——線性可分

若找不到這樣的超平面,數(shù)據(jù)集就是線性不可分的線性可分線性不可分7.1SVM的相關(guān)概念——間隔最大化點(diǎn)到面的距離

7.1SVM的相關(guān)概念——間隔最大化

但僅滿足上式的參數(shù)構(gòu)成的分隔超平面魯棒性較弱,我們希望能找到類似下圖中兩條虛線中間的實(shí)線作為分隔線,這樣的分割線具有較好的魯棒性。上面的公式變成:支持向量(SupportVector)就是左圖落在虛線上的正負(fù)實(shí)例點(diǎn)。而正負(fù)支持向量與分隔平面的距離之和被稱為間隔,如公式

(7.7)7.1SVM的相關(guān)概念——間隔最大化上頁(yè)圖中,改變?chǔ)?b的值即改變分隔平面的法向量和相對(duì)坐標(biāo)原點(diǎn)的平移量,會(huì)使得間隔的大小也發(fā)生變化,我們希望能找到可以使間隔取得最大值的ω確定的那個(gè)分隔平面。間隔的最大值,被稱為最大間隔,正因如此SVM又常被稱為大間隔分類器(largemarginclassifier)。對(duì)應(yīng)的兩條包含支持向量的兩條虛線被稱為間隔邊界,由上頁(yè)圖可知分隔超平面、分割邊界由支持向量決定。

(7.9)

目錄/Contents7.17.2SVM相關(guān)概念線性SVM7.3非線性SVM7.4軟間隔7.5應(yīng)用案例7.2線性SVM式(7.9)的解ω*,b*確定一個(gè)樣本集的分隔超平面

(7.10)式(7.9)是一個(gè)凸二次規(guī)劃問(wèn)題,可以用拉格朗日乘子法得到其對(duì)偶問(wèn)題,通過(guò)求解對(duì)偶問(wèn)題得到原始問(wèn)題的最優(yōu)解。引進(jìn)拉格朗日乘子后會(huì)使對(duì)偶問(wèn)題相對(duì)原始問(wèn)題更容易求解,而且可以推廣到非線性分類問(wèn)題。7.2線性SVM——對(duì)偶問(wèn)題

(7.11)定義廣義拉格朗日函數(shù)為:

(7.12)7.2線性SVM——對(duì)偶問(wèn)題

7.2線性SVM——學(xué)習(xí)算法

(7.19)

7.2線性SVM——學(xué)習(xí)算法利用對(duì)偶性轉(zhuǎn)換,得到對(duì)偶問(wèn)題(7.20)(7.20)

(7.21)(7.22)可得式(7.23)、(7.24)。

(7.23)(7.24)7.2線性SVM——學(xué)習(xí)算法

(7.25)(7.26)由此得到式(7.9)的對(duì)偶問(wèn)題

若對(duì)偶問(wèn)題(7.26)的解恰好對(duì)應(yīng)(7.9)的解,需滿足KKT條件,此處的KKT條件是(7.27)7.2線性SVM——學(xué)習(xí)算法

(7.28)

(7.29)

(7.30)7.2線性SVM——學(xué)習(xí)算法

(7.31)

(7.32)至此,就完成了線性支持向量機(jī)的求解,由支持向量得到了一個(gè)線性分類器(7.33)

目錄/Contents7.17.2SVM相關(guān)概念線性SVM7.3非線性SVM7.4軟間隔7.5應(yīng)用案例7.3非線性SVM——核心思想對(duì)于線性不可分集合,SVM算法將它們從原始空間映射到更高維度的空間中,使得它們?cè)诟呔S的空間中變成線性可分的

(7.34)(7.35)

7.3非線性SVM——核心思想對(duì)偶問(wèn)題也由(7.26)轉(zhuǎn)變?yōu)槭剑?.36)(7.36)

如果有辦法在原始特征空間計(jì)算映射后的高維空間的內(nèi)積,就可以直接在原始特征空間上構(gòu)建一個(gè)分類器了,這種直接在原始空間上計(jì)算內(nèi)積的方法稱為核函數(shù)方法。7.3非線性SVM——核心思想

(7.37)7.3非線性SVM——核函數(shù)的應(yīng)用

(7.38)對(duì)于一個(gè)新的樣本,式(7.38)給出了高維空間上的線性分類器的計(jì)算方法,但是有了核函數(shù),我們不需要計(jì)算內(nèi)積,使用式(7.39)進(jìn)行分類,這樣就避免了高維空間中計(jì)算量大增的“維數(shù)災(zāi)難”問(wèn)題。(7.39)

7.3非線性SVM——核函數(shù)的應(yīng)用例7.3.1:假設(shè)二維空間上的向量x到三維空間上的映射如式(7.40),求這個(gè)映射的核函數(shù)。(7.40)(7.41)(7.42)已知映射公式(7.40)假設(shè)二維空間上的兩個(gè)向量x,y,映射到三維空間后的向量?jī)?nèi)積如式(7.41)。而在映射之前的二維空間中,向量x,y的內(nèi)積如式(7.42)

7.3非線性SVM——核函數(shù)的應(yīng)用(7.43)若將例7.3.1中的映射變得更復(fù)雜一點(diǎn),將二維空間的向量映射到四維空間中,如式(7.43)。你會(huì)發(fā)現(xiàn)映射(7.43)與(7.40)具有相同的核函數(shù)。顯然,核函數(shù)的計(jì)算復(fù)雜度要比在映射后的高維空間中直接計(jì)算向量?jī)?nèi)積的復(fù)雜度更低。

從式(7.36)、(7.39)知,高維空間中對(duì)偶問(wèn)題求解、最后分隔超平面的解析式都只需要計(jì)算映射后的向量?jī)?nèi)積,不需要知道映射的具體形式。我們直接在原始空間中找到一些函數(shù),判斷這些函數(shù)是否可以作為有效的核函數(shù),然后將核函數(shù)直接代入(7.36)、(7.39)就可以得到高維的線性分隔超平面,這樣就節(jié)省了高維映射、高維空間向量?jī)?nèi)積運(yùn)算等操作,降低了復(fù)雜度。Mercer定理給出了一個(gè)判斷某個(gè)函數(shù)是否可以作為核函數(shù)的方法。7.3非線性SVM——核函數(shù)的應(yīng)用

(7.44)定理第一句是說(shuō)核函數(shù)是原始空間上兩個(gè)向量到一個(gè)實(shí)數(shù)的映射,后半句中訓(xùn)練樣例的核函數(shù)矩陣如式Mercer定理說(shuō)明任何一個(gè)使矩陣(7.44)為半正定矩陣的函數(shù)k?,?都可以使一個(gè)有效的核函數(shù),而每個(gè)有效的核函數(shù)又可以隱式地定義了一個(gè)特征空間,這個(gè)特征空間被稱為再生核希爾伯特空間(ReproducingKernelHilbertSpaces,RKHS)。

7.3非線性SVM——核函數(shù)的應(yīng)用

有了核函數(shù)就可以隱式的生成一個(gè)高維空間,但是樣本集在這個(gè)隱式的高維空間中是否具有一個(gè)良好的線性分隔超平面呢?這就要看核函數(shù)的選擇了,所以現(xiàn)在原始空間上線性不可分樣本集的分類問(wèn)題就變成了尋找合適的核函數(shù)問(wèn)題了。7.3非線性SVM——常用核函數(shù)核函數(shù)的選取直接關(guān)系到對(duì)樣本集的分類效果,因此通常需要根據(jù)應(yīng)用場(chǎng)景選擇合適的核函數(shù)。具體的應(yīng)用場(chǎng)景中,有專用核函數(shù)和通用核函數(shù)兩類,專用核函數(shù)需要根據(jù)具體應(yīng)用場(chǎng)景去構(gòu)造,而常見(jiàn)的通用核函數(shù)包括:線性核、多項(xiàng)式核、高斯核、拉普拉斯核、Sigmoid核。線性核函數(shù)如式(7.46),

線性核主要用于線性可分的場(chǎng)景,原始空間和映射空間的維度并沒(méi)有發(fā)生變化。線性核的優(yōu)點(diǎn)是參數(shù)少、速度快,缺點(diǎn)是不能解決線性不可分的樣本集分類問(wèn)題。(7.46)多項(xiàng)式核函數(shù)如式(7.47),式中γ=1,n=1時(shí)就變成了線性核。通過(guò)升維使原本線性不可分的樣本集變得線性可分。(7.47)7.3非線性SVM——常用核函數(shù)高斯核函數(shù)如式(7.48),式中σ為高斯核的帶寬。高斯核函數(shù)是一種局部性強(qiáng)的核函數(shù),其可以將一個(gè)樣本映射到一個(gè)更高維的空間內(nèi),該核函數(shù)是應(yīng)用最廣的一個(gè),無(wú)論大樣本還是小樣本都有比較好的性能,相對(duì)于多項(xiàng)式核函數(shù)參數(shù)要少,在不確定合適的核函數(shù)的場(chǎng)景下可以優(yōu)先嘗試高斯核函數(shù)的分類效果。Sigmoid核函數(shù)如式(7.49),式中tanh?為雙曲正切函數(shù)。Sigmoid函數(shù)經(jīng)常用在神經(jīng)網(wǎng)絡(luò)的映射中。

(7.48)(7.49)

7.3非線性SVM——學(xué)習(xí)算法有了核函數(shù)后,就是對(duì)公式(7.37)的求解,求解方法與線性SVM類似,假設(shè)最優(yōu)解為α*,b*,則對(duì)應(yīng)的非線性SVM如式(7.50)。(7.50)

(7.51)與線性SVM的算法相比,非線性SVM的學(xué)習(xí)算法步驟多了選取適當(dāng)核函數(shù)的工作,其算法步驟包括:(1)選擇適當(dāng)?shù)暮撕瘮?shù);(2)求解對(duì)偶問(wèn)題α*;(3)求解偏移量b*;(4)構(gòu)造分類決策函數(shù)(7.50)。步驟一:選擇核函數(shù)。具體哪種核函數(shù)更適合,要看待分類的訓(xùn)練集。如果訓(xùn)練集的特征數(shù)量多,樣本數(shù)量不太多可以考慮使用線性核;如果特征數(shù)量少、樣本數(shù)量比較多的時(shí)候考慮使用高斯核。在不確定哪種核函數(shù)更合適的時(shí)候,可以采用交叉驗(yàn)證的方式比較各種不同核函數(shù)的分類效果,然后選擇一個(gè)最優(yōu)的。步驟二:求解最優(yōu)化問(wèn)題。選定了核函數(shù)后,就是解對(duì)偶問(wèn)題(7.37),與線性SVM求解類似也可以使用SMO算法求解。步驟三:計(jì)算偏移量。選擇α*的正分量αi*計(jì)算b*,如式(7.52)。步驟四:構(gòu)造非線性SVM的決策函數(shù)(7.50)。7.3非線性SVM——學(xué)習(xí)算法(7.52)目錄/Contents7.17.2SVM相關(guān)概念線性SVM7.3非線性SVM7.4軟間隔7.5應(yīng)用案例7.4軟間隔——定義前面SVM求解的假設(shè)是樣本集都是嚴(yán)格可分的,原始空間上線性可分或映射空間上線性可分。但是,現(xiàn)實(shí)應(yīng)用中由于噪聲點(diǎn)一類的影響導(dǎo)致訓(xùn)練集可能并不是完美可分的,而且嚴(yán)格完美的分隔超平面很有可能是過(guò)擬合的結(jié)果。為了解決這些問(wèn)題,在SVM算法的間隔最大化時(shí)使用軟間隔對(duì)公式(7.9)進(jìn)行優(yōu)化。為使SVM更具通用性、防止過(guò)擬合,引入軟間隔如下圖,軟間隔允許某些樣本不滿足約束條件,即軟間隔支持向量并不一定是離分隔超平面最近的點(diǎn)。這樣就可以過(guò)濾掉在分隔超平面附近由于噪聲而被錯(cuò)誤歸類的點(diǎn)。7.4軟間隔——定義

(7.54)

(7.55)

7.4軟間隔——采用軟間隔的SVM與硬間隔線性SVM算法類似,采用軟間隔的SVM求解也經(jīng)過(guò)拉格朗日函數(shù)構(gòu)建、對(duì)偶問(wèn)題、問(wèn)題求解、利用求解得到的分隔超平面構(gòu)建分類模型四個(gè)步驟。式(7.55)引入拉格朗日乘子,得到拉格朗日函數(shù)如式(7.56)。(7.56)式(7.56)中,αi,γi為拉格朗日乘子。與7.2.2的方法類似,Lω,b,α,ε,μ分別對(duì)ω,b,ε求偏導(dǎo),令其為0,得:(7.57)(7.58)(7.59)7.4軟間隔——采用軟間隔的SVM

(7.60)由于采用的是軟間隔,相

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論