集成学习之参数调整策略
1 Random Forest和Gradient Tree Boosting參數(shù)詳解
在sklearn.ensemble庫(kù)中,我們可以找到Random Forest分類和回歸的實(shí)現(xiàn):RandomForestClassifier和RandomForestRegression,Gradient Tree Boosting分類和回歸的實(shí)現(xiàn):GradientBoostingClassifier和GradientBoostingRegression。有了這些模型后,立馬上手操練起來(lái)?少俠請(qǐng)留步!且聽(tīng)我說(shuō)一說(shuō),使用這些模型時(shí)常遇到的問(wèn)題:
? ? ? 1、明明模型調(diào)教得很好了,可是效果離我的想象總有些偏差?——模型訓(xùn)練的第一步就是要定好目標(biāo),往錯(cuò)誤的方向走太多也是后退。
? ? ? 2、憑直覺(jué)調(diào)了某個(gè)參數(shù),可是居然沒(méi)有任何作用,有時(shí)甚至起到反作用?——定好目標(biāo)后,接下來(lái)就是要確定哪些參數(shù)是影響目標(biāo)的,其對(duì)目標(biāo)是正影響還是負(fù)影響,影響的大小。
? ? ? 3、感覺(jué)訓(xùn)練結(jié)束遙遙無(wú)期,sklearn只是個(gè)在小數(shù)據(jù)上的玩具?——雖然sklearn并不是基于分布式計(jì)算環(huán)境而設(shè)計(jì)的,但我們還是可以通過(guò)某些策略提高訓(xùn)練的效率。
? ? ? 4、模型開(kāi)始訓(xùn)練了,但是訓(xùn)練到哪一步了呢?——飽暖思淫欲啊,目標(biāo),性能和效率都得了滿足后,我們有時(shí)還需要有別的追求,例如訓(xùn)練過(guò)程的輸出,袋外得分計(jì)算等等。
通過(guò)總結(jié)這些常見(jiàn)的問(wèn)題,我們可以把模型的參數(shù)分為4類:目標(biāo)類、性能類、效率類和附加類。下表詳細(xì)地展示了4個(gè)模型參數(shù)的意義:
? ? ? 不難發(fā)現(xiàn),基于bagging的Random Forest模型和基于boosting的Gradient Tree Boosting模型有不少共同的參數(shù),然而某些參數(shù)的默認(rèn)值又相差甚遠(yuǎn)。在《使用sklearn進(jìn)行集成學(xué)習(xí)——理論》一文中,我們對(duì)bagging和boosting兩種集成學(xué)習(xí)技術(shù)有了初步的了解。Random Forest的子模型都擁有較低的偏差,整體模型的訓(xùn)練過(guò)程旨在降低方差,故其需要較少的子模型(n_estimators默認(rèn)值為10)且子模型不為弱模型(max_depth的默認(rèn)值為None),同時(shí),降低子模型間的相關(guān)度可以起到減少整體模型的方差的效果(max_features的默認(rèn)值為auto)。另一方面,Gradient Tree Boosting的子模型都擁有較低的方差,整體模型的訓(xùn)練過(guò)程旨在降低偏差,故其需要較多的子模型(n_estimators默認(rèn)值為100)且子模型為弱模型(max_depth的默認(rèn)值為3),但是降低子模型間的相關(guān)度不能顯著減少整體模型的方差(max_features的默認(rèn)值為None)。
2 如何調(diào)參?
聰明的讀者應(yīng)當(dāng)要發(fā)問(wèn)了:”博主,就算你列出來(lái)每個(gè)參數(shù)的意義,然并卵啊!我還是不知道無(wú)從下手啊!”
參數(shù)分類的目的在于縮小調(diào)參的范圍,首先我們要明確訓(xùn)練的目標(biāo),把目標(biāo)類的參數(shù)定下來(lái)。接下來(lái),我們需要根據(jù)數(shù)據(jù)集的大小,考慮是否采用一些提高訓(xùn)練效率的策略,否則一次訓(xùn)練就三天三夜,法國(guó)人孩子都生出來(lái)了。然后,我們終于進(jìn)入到了重中之重的環(huán)節(jié):調(diào)整那些影響整體模型性能的參數(shù)。
2.1 調(diào)參的目標(biāo):偏差和方差的協(xié)調(diào)
同樣在集成學(xué)習(xí)理論中,我們已討論過(guò)偏差和方差是怎樣影響著模型的性能——準(zhǔn)確度。調(diào)參的目標(biāo)就是為了達(dá)到整體模型的偏差和方差的大和諧!進(jìn)一步,這些參數(shù)又可分為兩類:過(guò)程影響類及子模型影響類。在子模型不變的前提下,某些參數(shù)可以通過(guò)改變訓(xùn)練的過(guò)程,從而影響模型的性能,諸如:“子模型數(shù)”(n_estimators)、“學(xué)習(xí)率”(learning_rate)等。另外,我們還可以通過(guò)改變子模型性能來(lái)影響整體模型的性能,諸如:“最大樹(shù)深度”(max_depth)、“分裂條件”(criterion)等。正由于bagging的訓(xùn)練過(guò)程旨在降低方差,而boosting的訓(xùn)練過(guò)程旨在降低偏差,過(guò)程影響類的參數(shù)能夠引起整體模型性能的大幅度變化。一般來(lái)說(shuō),在此前提下,我們繼續(xù)微調(diào)子模型影響類的參數(shù),從而進(jìn)一步提高模型的性能。
2.2 參數(shù)對(duì)整體模型性能的影響
假設(shè)模型是一個(gè)多元函數(shù)F,其輸出值為模型的準(zhǔn)確度。我們可以固定其他參數(shù),從而對(duì)某個(gè)參數(shù)對(duì)整體模型性能的影響進(jìn)行分析:是正影響還是負(fù)影響,影響的單調(diào)性?
對(duì)Random Forest來(lái)說(shuō),增加“子模型數(shù)”(n_estimators)可以明顯降低整體模型的方差,且不會(huì)對(duì)子模型的偏差和方差有任何影響。模型的準(zhǔn)確度會(huì)隨著“子模型數(shù)”的增加而提高。由于減少的是整體模型方差公式的第二項(xiàng),故準(zhǔn)確度的提高有一個(gè)上限。在不同的場(chǎng)景下,“分裂條件”(criterion)對(duì)模型的準(zhǔn)確度的影響也不一樣,該參數(shù)需要在實(shí)際運(yùn)用時(shí)靈活調(diào)整。調(diào)整“最大葉節(jié)點(diǎn)數(shù)”(max_leaf_nodes)以及“最大樹(shù)深度”(max_depth)之一,可以粗粒度地調(diào)整樹(shù)的結(jié)構(gòu):葉節(jié)點(diǎn)越多或者樹(shù)越深,意味著子模型的偏差越低,方差越高;同時(shí),調(diào)整“分裂所需最小樣本數(shù)”(min_samples_split)、“葉節(jié)點(diǎn)最小樣本數(shù)”(min_samples_leaf)及“葉節(jié)點(diǎn)最小權(quán)重總值”(min_weight_fraction_leaf),可以更細(xì)粒度地調(diào)整樹(shù)的結(jié)構(gòu):分裂所需樣本數(shù)越少或者葉節(jié)點(diǎn)所需樣本越少,也意味著子模型越復(fù)雜。一般來(lái)說(shuō),我們總采用bootstrap對(duì)樣本進(jìn)行子采樣來(lái)降低子模型之間的關(guān)聯(lián)度,從而降低整體模型的方差。適當(dāng)?shù)販p少“分裂時(shí)考慮的最大特征數(shù)”(max_features),給子模型注入了另外的隨機(jī)性,同樣也達(dá)到了降低子模型之間關(guān)聯(lián)度的效果。但是一味地降低該參數(shù)也是不行的,因?yàn)榉至褧r(shí)可選特征變少,模型的偏差會(huì)越來(lái)越大。在下圖中,我們可以看到這些參數(shù)對(duì)Random Forest整體模型性能的影響:
? ? ? 對(duì)Gradient Tree Boosting來(lái)說(shuō),“子模型數(shù)”(n_estimators)和“學(xué)習(xí)率”(learning_rate)需要聯(lián)合調(diào)整才能盡可能地提高模型的準(zhǔn)確度:想象一下,A方案是走4步,每步走3米,B方案是走5步,每步走2米,哪個(gè)方案可以更接近10米遠(yuǎn)的終點(diǎn)?同理,子模型越復(fù)雜,對(duì)應(yīng)整體模型偏差低,方差高,故“最大葉節(jié)點(diǎn)數(shù)”(max_leaf_nodes)、“最大樹(shù)深度”(max_depth)等控制子模型結(jié)構(gòu)的參數(shù)是與Random Forest一致的。類似“分裂時(shí)考慮的最大特征數(shù)”(max_features),降低“子采樣率”(subsample),也會(huì)造成子模型間的關(guān)聯(lián)度降低,整體模型的方差減小,但是當(dāng)子采樣率低到一定程度時(shí),子模型的偏差增大,將引起整體模型的準(zhǔn)確度降低。還記得“初始模型”(init)是什么嗎?不同的損失函數(shù)有不一樣的初始模型定義,通常,初始模型是一個(gè)更加弱的模型(以“平均”情況來(lái)預(yù)測(cè)),雖說(shuō)支持自定義,大多數(shù)情況下保持默認(rèn)即可。在下圖中,我們可以看到這些參數(shù)對(duì)Gradient Tree Boosting整體模型性能的影響:2.3 一個(gè)樸實(shí)的方案:貪心的坐標(biāo)下降法
到此為止,我們終于知道需要調(diào)整哪些參數(shù),對(duì)于單個(gè)參數(shù),我們也知道怎么調(diào)整才能提升性能。然而,表示模型的函數(shù)F并不是一元函數(shù),這些參數(shù)需要共同調(diào)整才能得到全局最優(yōu)解。也就是說(shuō),把這些參數(shù)丟給調(diào)參算法(諸如Grid Search)咯?對(duì)于小數(shù)據(jù)集,我們還能這么任性,但是參數(shù)組合爆炸,在大數(shù)據(jù)集上,或許我的子子孫孫能夠看到訓(xùn)練結(jié)果吧。實(shí)際上網(wǎng)格搜索也不一定能得到全局最優(yōu)解,而另一些研究者從解優(yōu)化問(wèn)題的角度嘗試解決調(diào)參問(wèn)題。
坐標(biāo)下降法是一類優(yōu)化算法,其最大的優(yōu)勢(shì)在于不用計(jì)算待優(yōu)化的目標(biāo)函數(shù)的梯度。我們最容易想到一種特別樸實(shí)的類似于坐標(biāo)下降法的方法,與坐標(biāo)下降法不同的是,其不是循環(huán)使用各個(gè)參數(shù)進(jìn)行調(diào)整,而是貪心地選取了對(duì)整體模型性能影響最大的參數(shù)。參數(shù)對(duì)整體模型性能的影響力是動(dòng)態(tài)變化的,故每一輪坐標(biāo)選取的過(guò)程中,這種方法在對(duì)每個(gè)坐標(biāo)的下降方向進(jìn)行一次直線搜索(line search)。首先,找到那些能夠提升整體模型性能的參數(shù),其次確保提升是單調(diào)或近似單調(diào)的。這意味著,我們篩選出來(lái)的參數(shù)是對(duì)整體模型性能有正影響的,且這種影響不是偶然性的,要知道,訓(xùn)練過(guò)程的隨機(jī)性也會(huì)導(dǎo)致整體模型性能的細(xì)微區(qū)別,而這種區(qū)別是不具有單調(diào)性的。最后,在這些篩選出來(lái)的參數(shù)中,選取影響最大的參數(shù)進(jìn)行調(diào)整即可。
無(wú)法對(duì)整體模型性能進(jìn)行量化,也就談不上去比較參數(shù)影響整體模型性能的程度。是的,我們還沒(méi)有一個(gè)準(zhǔn)確的方法來(lái)量化整體模型性能,只能通過(guò)交叉驗(yàn)證來(lái)近似計(jì)算整體模型性能。然而交叉驗(yàn)證也存在隨機(jī)性,假設(shè)我們以驗(yàn)證集上的平均準(zhǔn)確度作為整體模型的準(zhǔn)確度,我們還得關(guān)心在各個(gè)驗(yàn)證集上準(zhǔn)確度的變異系數(shù),如果變異系數(shù)過(guò)大,則平均值作為整體模型的準(zhǔn)確度也是不合適的。
總結(jié)
以上是生活随笔為你收集整理的集成学习之参数调整策略的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: delphi7aes加密解密与java互
- 下一篇: iphone查看删除的短信_iPhone