1. 方差與偏差
在前文中我們已經(jīng)提到了有關(guān)方差(Variance)與偏差(bias)的概念,這里系統(tǒng)的進(jìn)行介紹。
首先我們先來(lái)介紹過(guò)擬合的概念。我們?cè)谧铋_(kāi)始的時(shí)候就介紹過(guò),樣本集需要分割成訓(xùn)練樣本和測(cè)試樣本,訓(xùn)練樣本用于訓(xùn)練模型,測(cè)試樣本用于評(píng)估模型。但我們也可以使用訓(xùn)練樣本來(lái)計(jì)算模型精度。
下面這張圖中是一個(gè)一元特征空間的擬合問(wèn)題,橫坐標(biāo)是特征值,縱坐標(biāo)是對(duì)應(yīng)的y值,藍(lán)色點(diǎn)是分割出來(lái)的訓(xùn)練樣本集,黃色點(diǎn)是測(cè)試樣本集。這一眼看上去就是一個(gè)很簡(jiǎn)單的線性回歸(我們這里只是用這個(gè)問(wèn)題進(jìn)行舉例,希望大家把這個(gè)線性回歸看做一個(gè)很“復(fù)雜”的問(wèn)題)。
下圖三個(gè)模型中大家覺(jué)得哪個(gè)模型是預(yù)測(cè)最準(zhǔn)確的呢?

相信大家一眼看過(guò)去,心里已經(jīng)有了答案,但你有沒(méi)有思考過(guò),你為什么會(huì)得出這樣的結(jié)論呢?
我們一個(gè)個(gè)來(lái)看。首先,左圖的模型看起來(lái)非常完美,這個(gè)模型完美就完美在非常的“均勻”,用一個(gè)參數(shù)來(lái)衡量,就是測(cè)試樣本計(jì)算得到的均方根誤差最小,而訓(xùn)練樣本計(jì)算得到的均方根誤差最大;右圖的模型則非常的“離譜”,測(cè)試樣本計(jì)算得到的均方根誤差最大,而訓(xùn)練樣本計(jì)算得到的均方根誤差最小,差不多為0,預(yù)測(cè)值與真實(shí)值基本一樣;中間這個(gè)模型介于兩者之間。
在機(jī)器學(xué)習(xí)算法的實(shí)際應(yīng)用中,我們都希望得到左圖的“完美模型”,而事實(shí)是,由于機(jī)器學(xué)習(xí)算法非?!皬?qiáng)大”的擬合能力,使得我們得到右圖的過(guò)擬合模型。這個(gè)時(shí)候我們就希望通過(guò)調(diào)參,來(lái)使得我們的機(jī)器學(xué)習(xí)模型能夠盡可能的靠近“完美模型”(但事實(shí)上往往沒(méi)有辦法得到完美模型的,我們能夠得到的最佳模型基本就是中間這幅圖)。
事實(shí)上,方差與偏差就是描述機(jī)器學(xué)習(xí)模型準(zhǔn)確性的兩個(gè)概念,這時(shí)候我們需要上一張經(jīng)典示意圖來(lái)幫助理解:

大家回顧一下在嶺回歸與Lasso回歸那一節(jié)我們?cè)?jīng)說(shuō)過(guò),加入正則項(xiàng)之后,我們是通過(guò)犧牲偏差來(lái)減小模型的方差的,用這幅圖來(lái)解釋就是,我們沒(méi)有辦法得到左上那種完美模型,因此我們退而求其次,通過(guò)加入懲罰項(xiàng),使得模型的方差減小,但偏差增加,也就是選擇了左下這種模型(當(dāng)然,我們的偏差沒(méi)有那么大,是在允許范圍內(nèi)的偏差)。
方差過(guò)大或者偏差過(guò)大,模型的精確度都會(huì)很差勁,如下圖所示,左上和右下的模型表型都很差,但他們影響模型精確度的方式不一樣,方差過(guò)大會(huì)使得樣本點(diǎn)預(yù)測(cè)值更加“分散”,方差體現(xiàn)的是模型在測(cè)試集上表現(xiàn)的穩(wěn)健程度;而偏差過(guò)大則會(huì)使樣本點(diǎn)預(yù)測(cè)值更加“偏離”,偏差體現(xiàn)的是模型在測(cè)試集上的偏離程度。


一個(gè)模型的差誤有方差與偏差以及噪聲,在這里我們統(tǒng)稱(chēng)為“泛化誤差”,接下來(lái)這張圖非常重要,需要仔細(xì)體會(huì)。

在模型復(fù)雜度比較小的時(shí)候,方差可能會(huì)比較低(因?yàn)榇藭r(shí)模型簡(jiǎn)單,比較穩(wěn)?。?,偏差可能會(huì)比較大(因?yàn)槟P颓窋M合),但隨著模型復(fù)雜度的增加,模型越來(lái)越準(zhǔn)確,模型的偏差逐漸減小(可以理解為,訓(xùn)練集樣本計(jì)算的誤差逐漸變小,模型逐漸過(guò)擬合),模型的方差逐漸增大(可以理解為,測(cè)試集樣本計(jì)算的誤差逐漸變大,模型逐漸過(guò)擬合)。
調(diào)參的意義是:盡量降低模型的復(fù)雜性,使得模型略微欠擬合或者略微過(guò)擬合的情況下,方差盡可能的小。
2. 調(diào)參工具
在正式介紹調(diào)參之前,我們還需要了解一些調(diào)參工具。
2.1 K折交叉驗(yàn)證
有時(shí)候我們的樣本集數(shù)據(jù)很少,只有幾百個(gè)乃至于幾十個(gè),這個(gè)時(shí)候其實(shí)偶然性很大,在統(tǒng)計(jì)學(xué)意義上來(lái)說(shuō)即便劃分測(cè)試集與樣本集也意義不大,這個(gè)時(shí)候我們可以使用K折交叉驗(yàn)證。
將數(shù)據(jù)分成1,2,3...k一共k份,然后將第i份數(shù)據(jù)作為測(cè)試集驗(yàn)證精度,其余k-1份作為建模集,這樣訓(xùn)練k次,將每次訓(xùn)練得到的精度結(jié)果進(jìn)行平均作為該模型的精度,這就是k折交叉驗(yàn)證。
調(diào)參是一個(gè)黑盒優(yōu)化的過(guò)程,它不像我們?cè)谇懊娼榻B各種算法時(shí)提到的凸優(yōu)化問(wèn)題可以求極值可以梯度下降,我們所要優(yōu)化的“函數(shù)”是看不見(jiàn)的或者說(shuō)不能確切描述的,猶如盲人摸象,只能這里摸一下,那里戳一下,然后得到一個(gè)大概的輪廓。
其實(shí)調(diào)參方法很多,包括Grid search(網(wǎng)格搜索)、Random search(隨機(jī)搜索),還有Genetic algorithm(遺傳算法)、Paticle Swarm Optimization(粒子群優(yōu)化)、Bayesian Optimization(貝葉斯優(yōu)化)、TPE、SMAC等。
以下介紹三種最常用的調(diào)參方法。
2.2 網(wǎng)格搜索
在Lasso回歸那一節(jié)我們介紹過(guò)網(wǎng)格搜索。其實(shí)這個(gè)很好理解,我們雖然不知道使得模型精度最好的參數(shù)是什么,但我們知道他的大概范圍,那么我們就在這個(gè)大概范圍內(nèi)以一定間隔選取一些數(shù)進(jìn)行嘗試,通過(guò)測(cè)試集或者K折交叉驗(yàn)證來(lái)選取出最佳的精度。
舉個(gè)例子。假設(shè)我們想要y=ax這個(gè)模型的a值,我們使用網(wǎng)格搜索,假設(shè)我們已經(jīng)知道a很大概率大于0,那我們就從(0,1000]這個(gè)范圍內(nèi),每隔100試一次,[100,200,300,400,500,600,700,800,900,1000],結(jié)果發(fā)現(xiàn)當(dāng)a=100時(shí),測(cè)試集精度最高,這個(gè)時(shí)候你說(shuō)a=100模型最佳,那當(dāng)然可以。但是你有沒(méi)有想過(guò),有可能在0到100之間有比100更加優(yōu)秀的參數(shù)取值呢?因此我們上一步粗略的確定范圍之后,再?gòu)?0, 100]范圍內(nèi)每隔10試一次,以此類(lèi)推,直到找到最佳參數(shù)為止。當(dāng)然了,具體情況具體討論,調(diào)參需要靈活的手腦結(jié)合,這里只是舉了一個(gè)例子幫助理解。
當(dāng)有兩個(gè)參數(shù)a,b的時(shí)候,a的范圍設(shè)置在[1,2,3,4,5],b的范圍設(shè)置在[0.2,0.4,0.8,1.0]。這個(gè)時(shí)候我們需要遍歷a,b的所有有可能的組合,也就是一個(gè)“網(wǎng)格”了。
這種方法的缺點(diǎn)也是顯而易見(jiàn)的,很明顯這就是一個(gè)遍歷的方法,因此計(jì)算量是顯而易見(jiàn)的大,尤其是在多個(gè)參數(shù),參數(shù)范圍過(guò)大難以確定,再加上多次K折的時(shí)候,效率非常差。舉例假設(shè)有3個(gè)參數(shù),每個(gè)參數(shù)的取值有1000個(gè),再加上5次k折,那么就需要訓(xùn)練:3*1000*5=15000次。
2.3 隨機(jī)搜索
隨機(jī)搜索是在網(wǎng)格搜索上做了一個(gè)優(yōu)化,以避免掉一些不必要的計(jì)算,從而獲得更加高的效率。本質(zhì)上就是一種瞎猜罷了,相對(duì)于網(wǎng)格搜索提高了效率,但也更加容易陷入局部最優(yōu)。
2.4 貝葉斯優(yōu)化
貝葉斯優(yōu)化在黑盒優(yōu)化中可以說(shuō)是使用范圍最廣,表現(xiàn)也相對(duì)比較好的一種算法。
目前貝葉斯優(yōu)化算法應(yīng)用最廣的是SMBO(Sequential?Model-Based?Optimazation),即基于模型的序列優(yōu)化。目前有三種常見(jiàn)的SMBO算法:基于高斯過(guò)程回歸的序列超參優(yōu)化、基于隨機(jī)森林算法代理的序列超參優(yōu)化(即?smac),基于TPE算法代理的序列超參優(yōu)化。算法眾多但基本思想類(lèi)似,這里以smac為例進(jìn)行介紹。當(dāng)然了實(shí)際使用貝葉斯優(yōu)化有很多現(xiàn)成的算法包,并不需要掌握其基礎(chǔ)原理,感興趣的話可以看看。



所謂的貝葉斯優(yōu)化實(shí)際上也是將黑盒假設(shè)成了某一個(gè)具體的已知模型,我們稱(chēng)為代理模型,例如smac算法的代理模型為隨機(jī)森林模型,這個(gè)隨機(jī)森林模型的輸入是超參數(shù)空間的隨機(jī)取值params_config,輸出則是在當(dāng)前這個(gè)params_config下,模型的表現(xiàn)metric_val,最后通過(guò)擬合這個(gè)模型,來(lái)獲得其局部最優(yōu)的metric_val,此時(shí)的params_config就是我們調(diào)參的結(jié)果了。
然而擬合這個(gè)代理模型的代價(jià)是巨大的,因?yàn)槲覀冎烂看蔚玫揭粋€(gè)(params_config, metric_val)的代價(jià)都需要我們訓(xùn)練一次(X, y), 因此我們引入貝葉斯優(yōu)化的概念,借助先驗(yàn)后驗(yàn)的知識(shí),來(lái)使得代價(jià)最小。
如圖smac-1所示,左圖是待擬合的代理模型,在橫軸,也就是params_config軸范圍內(nèi),每一處模型的方差都是相等且都是很大的,因?yàn)榇藭r(shí)沒(méi)有已知點(diǎn),在隨機(jī)引入一個(gè)已知的(params_config,?metric_val)后,圖像發(fā)生了變化,在該點(diǎn)附近的方差變小了。
貝葉斯優(yōu)化每次都只引入一個(gè)新的點(diǎn),那么問(wèn)題來(lái)了,我們如何確定下一個(gè)點(diǎn)的config呢?這時(shí)候就要提到一個(gè)非常關(guān)鍵的函數(shù)acquisition function,這個(gè)函數(shù)就是幫助計(jì)算接下來(lái)要引入哪一個(gè)點(diǎn),這個(gè)函數(shù)具體原理有興趣可以自行查找資料,總之它比較感興趣的下一個(gè)點(diǎn)有兩個(gè)條件:1. 離目前的已知點(diǎn)較遠(yuǎn),也就是該點(diǎn)周?chē)姆讲钶^大;2.離全局最優(yōu)的點(diǎn)足夠近。
根據(jù)這個(gè)原則,當(dāng)我們找到足夠多的已知點(diǎn)后,就可以擬合代理模型,最后求得該代理模型的全局最優(yōu)值best metric_val以及其對(duì)應(yīng)的params_config。
3. 超參數(shù)
光有了工具還不夠,調(diào)參調(diào)參,有了“調(diào)”的工具,我們還需要了解我們調(diào)整的“參”到底是什么,有什么樣的范圍和性質(zhì),才能動(dòng)手去調(diào)。
我們以嶺回歸算法為例,在該算法中,權(quán)重矩陣是我們可以通過(guò)訓(xùn)練集樣本數(shù)據(jù)計(jì)算得到的,但懲罰項(xiàng)的系數(shù)不可以,這種不可以通過(guò)訓(xùn)練集樣本求解得到的,模型固有的參數(shù),就是超參數(shù),它影響著我們模型的精度,但是卻不可以直接計(jì)算得出,因此我們就需要用上面介紹的那些黑盒優(yōu)化的方式來(lái)進(jìn)行調(diào)試。
舉一個(gè)不恰當(dāng)?shù)睦?,廠家在生產(chǎn)自行車(chē)的時(shí)候,自行車(chē)的輪胎直徑、各零件的尺寸,都可以通過(guò)設(shè)計(jì)圖計(jì)算得到,這些參數(shù)不需要也不能隨便調(diào)整,都是根據(jù)其他零件的尺寸相配套計(jì)算得出的。但是自行車(chē)的坐墊高度卻需要根據(jù)不同的使用者進(jìn)行調(diào)整至最舒適的高度。這里的坐墊高度就像是超參數(shù),需要根據(jù)不同的訓(xùn)練集調(diào)整至不同的值,使得預(yù)測(cè)效果最佳。當(dāng)然不調(diào)整也可以,你也可以坐著特別高的坐墊騎車(chē),只不過(guò)比較容易發(fā)生危險(xiǎn)罷了。
以下介紹幾種常用機(jī)器學(xué)習(xí)算法的參數(shù)(基本都是以Python的Sklearn為例)
3.1 SVM參數(shù)
首先推薦一個(gè)鏈接:https://www.cnblogs.com/pinard/p/6117515.html
這個(gè)鏈接非常詳細(xì)的歸納了SVM函數(shù)的參數(shù),可以當(dāng)做工具書(shū)查閱。但這里我們只介紹兩個(gè)對(duì)于SVM最重要的參數(shù):
1. 懲罰系數(shù)C
在介紹SVM的時(shí)候我們提到過(guò)一個(gè)軟間隔的概念,有需要的可以回顧一下,如下圖所示,通常二分類(lèi)問(wèn)題并不是完全線性可分的,會(huì)有一些“交錯(cuò)”的點(diǎn)。圖中黑色線是最佳超平面,而虛線到直線的距離就是軟間隔,同時(shí)兩個(gè)虛線之間的點(diǎn)就是支持向量。懲罰系數(shù)就是對(duì)這個(gè)軟間隔的大小進(jìn)行設(shè)置的參數(shù)。

默認(rèn)C=1,C越趨近于0,軟間隔越大,支持向量越多,模型的容錯(cuò)性越強(qiáng),模型越“穩(wěn)健”。一般需要通過(guò)交叉驗(yàn)證來(lái)選擇一個(gè)合適的C。一般來(lái)說(shuō),如果噪音點(diǎn)較多時(shí),C需要小一些。如果用我們上面介紹的方差與偏差的理論來(lái)解釋?zhuān)?qǐng)看下面這張圖,當(dāng)C越接近0,我們可以看做把總體泛化誤差向左推。反之亦然。

2. 核函數(shù)
在SVM那節(jié)我們說(shuō)過(guò),針對(duì)線性不可分的情況,SVM是通過(guò)把低維特征向量映射到高維特征空間使其變得線性可分的,因此核函數(shù)的選擇對(duì)于SVM算法至關(guān)重要。
在scikit-learn中,內(nèi)置的核函數(shù)一共有4種,當(dāng)然如果你認(rèn)為線性核函數(shù)不算核函數(shù)的話,那就只有三種。
1)線性核函數(shù)(Linear Kernel)表達(dá)式為:K(x,z)=x?z,就是普通的內(nèi)積,LinearSVC 和?LinearSVR 只能使用它。
2) ?多項(xiàng)式核函數(shù)(Polynomial Kernel)是線性不可分SVM常用的核函數(shù)之一,表達(dá)式為:K(x,z)=(γx?z+r)^d?,其中,γ,r,d都需要自己調(diào)參定義,比較麻煩。
3)高斯核函數(shù)(Gaussian Kernel),在SVM中也稱(chēng)為徑向基核函數(shù)(Radial Basis Function,RBF),它是libsvm默認(rèn)的核函數(shù),當(dāng)然也是scikit-learn默認(rèn)的核函數(shù)。表達(dá)式為:K(x,z)=exp(?γ||x?z||^2),?其中,γ大于0,需要自己調(diào)參定義。
4)Sigmoid核函數(shù)(Sigmoid Kernel)也是線性不可分SVM常用的核函數(shù)之一,表達(dá)式為:K(x,z)=tanh(γx?z+r), 其中,γ,r都需要自己調(diào)參定義。
一般情況下,對(duì)非線性數(shù)據(jù)使用默認(rèn)的高斯核函數(shù)會(huì)有比較好的效果,如果你不是SVM調(diào)參高手的話,建議使用高斯核來(lái)做數(shù)據(jù)分析。
除去以上懲罰系數(shù)與核函數(shù)的參數(shù)需要調(diào)參外,SVM還有正則化參數(shù)需要調(diào)參,因?yàn)樵贚asso回歸里面已經(jīng)講過(guò)這個(gè)問(wèn)題,因此不再贅述。
3.2?RF參數(shù)
還是先上鏈接:scikit-learn隨機(jī)森林調(diào)參小結(jié):https://www.cnblogs.com/pinard/p/6160412.html
這個(gè)鏈接對(duì)RF的每一個(gè)參數(shù)的講解都非常詳細(xì)了。
在介紹隨機(jī)森林的時(shí)候我們說(shuō)過(guò),bagging的方法是將一堆弱學(xué)習(xí)器集成為強(qiáng)學(xué)習(xí)器,因此,參數(shù)又分為單個(gè)決策樹(shù)參數(shù)和整體的框架參數(shù)
1. 框架參數(shù)
下面我們來(lái)看RF重要的Bagging框架的參數(shù),由于RandomForestClassifier和RandomForestRegressor參數(shù)絕大部分相同,這里會(huì)將它們一起講,不同點(diǎn)會(huì)指出。
1)n_estimators: 也就是最大的弱學(xué)習(xí)器的個(gè)數(shù)。一般來(lái)說(shuō)n_estimators太小,容易欠擬合,n_estimators太大,計(jì)算量會(huì)太大,并且n_estimators到一定的數(shù)量后,再增大n_estimators獲得的模型提升會(huì)很小,所以一般選擇一個(gè)適中的數(shù)值。默認(rèn)是100。
2)?oob_score?:即是否采用袋外樣本來(lái)評(píng)估模型的好壞。這個(gè)不是超參數(shù),默認(rèn)識(shí)False。個(gè)人推薦設(shè)置為T(mén)rue,因?yàn)榇夥謹(jǐn)?shù)反應(yīng)了一個(gè)模型擬合后的泛化能力(而且有時(shí)候這個(gè)值比K折驗(yàn)證的精度值,比如均方根誤差之類(lèi)的,更能有效反應(yīng)模型精度)。
3)criterion:?即CART樹(shù)做劃分時(shí)對(duì)特征的評(píng)價(jià)標(biāo)準(zhǔn)。分類(lèi)模型和回歸模型的損失函數(shù)是不一樣的。分類(lèi)RF對(duì)應(yīng)的CART分類(lèi)樹(shù)默認(rèn)是基尼系數(shù)gini,另一個(gè)可選擇的標(biāo)準(zhǔn)是信息增益?;貧wRF對(duì)應(yīng)的CART回歸樹(shù)默認(rèn)是均方差mse,另一個(gè)可以選擇的標(biāo)準(zhǔn)是絕對(duì)值差mae。一般來(lái)說(shuō)選擇默認(rèn)的標(biāo)準(zhǔn)就已經(jīng)很好的。
從上面可以看出, RF重要的框架參數(shù)比較少,主要需要關(guān)注的是?n_estimators,即RF最大的決策樹(shù)個(gè)數(shù),調(diào)參一般一上來(lái)就先調(diào)這個(gè)值。
2. 決策樹(shù)參數(shù)
這部分參數(shù)學(xué)習(xí)之前,一定要先認(rèn)真回顧決策樹(shù)中的CART樹(shù)算法。
1) 單棵決策樹(shù)使用的最大特征數(shù)max_features:?可以使用很多種類(lèi)型的值,默認(rèn)是"auto",意味著每棵樹(shù)劃分時(shí)最多考慮√N(yùn)個(gè)特征;如果是"log2"意味著劃分時(shí)最多考慮log2N個(gè)特征;如果是"sqrt"或者"auto"意味著劃分時(shí)最多考慮√N(yùn)個(gè)特征。如果是整數(shù),代表考慮的特征絕對(duì)數(shù)。如果是浮點(diǎn)數(shù),代表考慮特征百分比,即考慮(百分比xN)取整后的特征數(shù)。其中N為樣本總特征數(shù)。一般我們用默認(rèn)的"auto"就可以了,如果特征數(shù)非常多,我們可以靈活使用剛才描述的其他取值來(lái)控制劃分時(shí)考慮的最大特征數(shù),以控制決策樹(shù)的生成時(shí)間。
2)?決策樹(shù)最大深度max_depth:?默認(rèn)可以不輸入,如果不輸入的話,決策樹(shù)在建立子樹(shù)的時(shí)候不會(huì)限制子樹(shù)的深度。一般來(lái)說(shuō),數(shù)據(jù)少或者特征少的時(shí)候可以不管這個(gè)值。如果模型樣本量多,特征也多的情況下,推薦限制這個(gè)最大深度,具體的取值取決于數(shù)據(jù)的分布。常用的可以取值10-100之間。
3)?內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split:?這個(gè)值限制了子樹(shù)繼續(xù)劃分的條件,如果某節(jié)點(diǎn)的樣本數(shù)少于min_samples_split,則不會(huì)繼續(xù)再?lài)L試選擇最優(yōu)特征來(lái)進(jìn)行劃分。?默認(rèn)是2.如果樣本量不大,不需要管這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
4)?葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf:?這個(gè)值限制了葉子節(jié)點(diǎn)最少的樣本數(shù),如果某葉子節(jié)點(diǎn)數(shù)目小于樣本數(shù),則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。?默認(rèn)是1,可以輸入最少的樣本數(shù)的整數(shù),或者最少樣本數(shù)占樣本總數(shù)的百分比。如果樣本量不大,不需要管這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
5)葉子節(jié)點(diǎn)最小的樣本權(quán)重和min_weight_fraction_leaf:這個(gè)值限制了葉子節(jié)點(diǎn)所有樣本權(quán)重和的最小值,如果小于這個(gè)值,則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。?默認(rèn)是0,就是不考慮權(quán)重問(wèn)題。一般來(lái)說(shuō),如果我們有較多樣本有缺失值,或者分類(lèi)樹(shù)樣本的分布類(lèi)別偏差很大,就會(huì)引入樣本權(quán)重,這時(shí)我們就要注意這個(gè)值了。
6)?最大葉子節(jié)點(diǎn)數(shù)max_leaf_nodes:?通過(guò)限制最大葉子節(jié)點(diǎn)數(shù),可以防止過(guò)擬合,默認(rèn)是"None”,即不限制最大的葉子節(jié)點(diǎn)數(shù)。如果加了限制,算法會(huì)建立在最大葉子節(jié)點(diǎn)數(shù)內(nèi)最優(yōu)的決策樹(shù)。如果特征不多,可以不考慮這個(gè)值,但是如果特征分成多的話,可以加以限制,具體的值可以通過(guò)交叉驗(yàn)證得到。
7)?節(jié)點(diǎn)劃分最小不純度min_impurity_split:?這個(gè)值限制了決策樹(shù)的增長(zhǎng),如果某節(jié)點(diǎn)的不純度(基于基尼系數(shù),均方差)小于這個(gè)閾值,則該節(jié)點(diǎn)不再生成子節(jié)點(diǎn)。即為葉子節(jié)點(diǎn)?。一般不推薦改動(dòng)默認(rèn)值1e-7。
上面決策樹(shù)參數(shù)中最重要的包括最大特征數(shù)max_features, 最大深度max_depth, 內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split和葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf。


還是用這張圖來(lái)解釋?zhuān)鶕?jù)上文對(duì)每一個(gè)參數(shù)的解釋?zhuān)覀冎?,max_depth和max_features這兩個(gè)參數(shù)變大時(shí),都是將模型總體的泛化精度向右推,模型變復(fù)雜;min_sample_split和min_sample_leaf這兩個(gè)參數(shù)變大時(shí),都是將模總體的泛化精度向左推,模型變簡(jiǎn)單。
3.3 GBDT參數(shù)
與隨機(jī)森林相同,GBDT算法的參數(shù)也分為框架參數(shù)和單個(gè)弱學(xué)習(xí)器的參數(shù)。
鏈接在這兒:https://www.cnblogs.com/pinard/p/6143927.html
1. 框架參數(shù)
首先,我們來(lái)看boosting框架相關(guān)的重要參數(shù),相比較RF而言,GBDT的框架參數(shù)要復(fù)雜一些。由于GradientBoostingClassifier和GradientBoostingRegressor的參數(shù)絕大部分相同,我們下面會(huì)一起來(lái)講,不同點(diǎn)會(huì)單獨(dú)指出。
1)n_estimators: 也就是弱學(xué)習(xí)器的最大迭代次數(shù),或者說(shuō)最大的弱學(xué)習(xí)器的個(gè)數(shù)。一般來(lái)說(shuō)n_estimators太小,容易欠擬合,n_estimators太大,又容易過(guò)擬合,一般選擇一個(gè)適中的數(shù)值。默認(rèn)是100。在實(shí)際調(diào)參的過(guò)程中,我們常常將n_estimators和下面介紹的參數(shù)learning_rate一起考慮。
2)learning_rate: 即每個(gè)弱學(xué)習(xí)器的權(quán)重縮減系數(shù)ν,也稱(chēng)作步長(zhǎng),在原理篇的正則化章節(jié)我們也講到了,加上了正則化項(xiàng),我們的強(qiáng)學(xué)習(xí)器的迭代公式為。ν的取值范圍為0<ν≤1。對(duì)于同樣的訓(xùn)練集擬合效果,較小的ν意味著模型收斂速度慢,我們需要更多的弱學(xué)習(xí)器的迭代次數(shù)。通常我們用步長(zhǎng)和迭代最大次數(shù)一起來(lái)決定算法的擬合效果。所以這兩個(gè)參數(shù)n_estimators和learning_rate要一起調(diào)參。一般來(lái)說(shuō),可以從一個(gè)小一點(diǎn)的ν開(kāi)始調(diào)參,默認(rèn)是1。
3)?subsample: 即我們?cè)谠砥恼齽t化章節(jié)講到的子采樣,取值為(0,1]。注意這里的子采樣和隨機(jī)森林不一樣,隨機(jī)森林使用的是放回抽樣,而這里是不放回抽樣。如果取值為1,則全部樣本都使用,等于沒(méi)有使用子采樣。如果取值小于1,則只有一部分樣本會(huì)去做GBDT的決策樹(shù)擬合。選擇小于1的比例可以減少方差,即防止過(guò)擬合,但是會(huì)增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間,默認(rèn)是1.0,即不使用子采樣。
4)?init: 即我們的初始化的時(shí)候的弱學(xué)習(xí)器,擬合對(duì)應(yīng)原理篇里面的f0(x),如果不輸入,則用訓(xùn)練集樣本來(lái)做樣本集的初始化分類(lèi)回歸預(yù)測(cè)。否則用init參數(shù)提供的學(xué)習(xí)器做初始化分類(lèi)回歸預(yù)測(cè)。一般用在我們對(duì)數(shù)據(jù)有先驗(yàn)知識(shí),或者之前做過(guò)一些擬合的時(shí)候,如果沒(méi)有的話就不用管這個(gè)參數(shù)了。
5)loss:?即我們GBDT算法中的損失函數(shù)。分類(lèi)模型和回歸模型的損失函數(shù)是不一樣的。
對(duì)于分類(lèi)模型,有對(duì)數(shù)似然損失函數(shù)"deviance"和指數(shù)損失函數(shù)"exponential"兩者輸入選擇。默認(rèn)是對(duì)數(shù)似然損失函數(shù)"deviance"。在原理篇中對(duì)這些分類(lèi)損失函數(shù)有詳細(xì)的介紹。一般來(lái)說(shuō),推薦使用默認(rèn)的"deviance"。它對(duì)二元分離和多元分類(lèi)各自都有比較好的優(yōu)化。而指數(shù)損失函數(shù)等于把我們帶到了Adaboost算法。
對(duì)于回歸模型,有均方差"ls",?絕對(duì)損失"lad", Huber損失"huber"和分位數(shù)損失“quantile”。默認(rèn)是均方差"ls"。一般來(lái)說(shuō),如果數(shù)據(jù)的噪音點(diǎn)不多,用默認(rèn)的均方差"ls"比較好。如果是噪音點(diǎn)較多,則推薦用抗噪音的損失函數(shù)"huber"。而如果我們需要對(duì)訓(xùn)練集進(jìn)行分段預(yù)測(cè)的時(shí)候,則采用“quantile”。
6)alpha:這個(gè)參數(shù)只有GradientBoostingRegressor有,當(dāng)我們使用Huber損失"huber"和分位數(shù)損失“quantile”時(shí),需要指定分位數(shù)的值。默認(rèn)是0.9,如果噪音點(diǎn)較多,可以適當(dāng)降低這個(gè)分位數(shù)的值。


2. 弱學(xué)習(xí)器參數(shù)
這里我們?cè)賹?duì)GBDT的類(lèi)庫(kù)弱學(xué)習(xí)器的重要參數(shù)做一個(gè)總結(jié)。由于GBDT使用了CART回歸決策樹(shù),因此它的參數(shù)基本來(lái)源于決策樹(shù)類(lèi),也就是說(shuō),和DecisionTreeClassifier和DecisionTreeRegressor的參數(shù)基本類(lèi)似。如果你已經(jīng)很熟悉決策樹(shù)算法的調(diào)參,那么這一節(jié)基本可以跳過(guò)。不熟悉的朋友可以繼續(xù)看下去。
1)?劃分時(shí)考慮的最大特征數(shù)max_features:?可以使用很多種類(lèi)型的值,默認(rèn)是"None",意味著劃分時(shí)考慮所有的特征數(shù);如果是"log2"意味著劃分時(shí)最多考慮log2Nlog2N個(gè)特征;如果是"sqrt"或者"auto"意味著劃分時(shí)最多考慮N??√N(yùn)個(gè)特征。如果是整數(shù),代表考慮的特征絕對(duì)數(shù)。如果是浮點(diǎn)數(shù),代表考慮特征百分比,即考慮(百分比xN)取整后的特征數(shù)。其中N為樣本總特征數(shù)。一般來(lái)說(shuō),如果樣本特征數(shù)不多,比如小于50,我們用默認(rèn)的"None"就可以了,如果特征數(shù)非常多,我們可以靈活使用剛才描述的其他取值來(lái)控制劃分時(shí)考慮的最大特征數(shù),以控制決策樹(shù)的生成時(shí)間。
2)?決策樹(shù)最大深度max_depth:?默認(rèn)可以不輸入,如果不輸入的話,默認(rèn)值是3。一般來(lái)說(shuō),數(shù)據(jù)少或者特征少的時(shí)候可以不管這個(gè)值。如果模型樣本量多,特征也多的情況下,推薦限制這個(gè)最大深度,具體的取值取決于數(shù)據(jù)的分布。常用的可以取值10-100之間。
3)?內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split:?這個(gè)值限制了子樹(shù)繼續(xù)劃分的條件,如果某節(jié)點(diǎn)的樣本數(shù)少于min_samples_split,則不會(huì)繼續(xù)再?lài)L試選擇最優(yōu)特征來(lái)進(jìn)行劃分。?默認(rèn)是2.如果樣本量不大,不需要管這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
4)?葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf:?這個(gè)值限制了葉子節(jié)點(diǎn)最少的樣本數(shù),如果某葉子節(jié)點(diǎn)數(shù)目小于樣本數(shù),則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。?默認(rèn)是1,可以輸入最少的樣本數(shù)的整數(shù),或者最少樣本數(shù)占樣本總數(shù)的百分比。如果樣本量不大,不需要管這個(gè)值。如果樣本量數(shù)量級(jí)非常大,則推薦增大這個(gè)值。
5)葉子節(jié)點(diǎn)最小的樣本權(quán)重和min_weight_fraction_leaf:這個(gè)值限制了葉子節(jié)點(diǎn)所有樣本權(quán)重和的最小值,如果小于這個(gè)值,則會(huì)和兄弟節(jié)點(diǎn)一起被剪枝。?默認(rèn)是0,就是不考慮權(quán)重問(wèn)題。一般來(lái)說(shuō),如果我們有較多樣本有缺失值,或者分類(lèi)樹(shù)樣本的分布類(lèi)別偏差很大,就會(huì)引入樣本權(quán)重,這時(shí)我們就要注意這個(gè)值了。
6)?最大葉子節(jié)點(diǎn)數(shù)max_leaf_nodes:?通過(guò)限制最大葉子節(jié)點(diǎn)數(shù),可以防止過(guò)擬合,默認(rèn)是"None”,即不限制最大的葉子節(jié)點(diǎn)數(shù)。如果加了限制,算法會(huì)建立在最大葉子節(jié)點(diǎn)數(shù)內(nèi)最優(yōu)的決策樹(shù)。如果特征不多,可以不考慮這個(gè)值,但是如果特征分成多的話,可以加以限制,具體的值可以通過(guò)交叉驗(yàn)證得到。
7)?節(jié)點(diǎn)劃分最小不純度min_impurity_split:?這個(gè)值限制了決策樹(shù)的增長(zhǎng),如果某節(jié)點(diǎn)的不純度(基于基尼系數(shù),均方差)小于這個(gè)閾值,則該節(jié)點(diǎn)不再生成子節(jié)點(diǎn)。即為葉子節(jié)點(diǎn)?。一般不推薦改動(dòng)默認(rèn)值1e-7。
4. 鏈接
機(jī)器學(xué)習(xí)-隨機(jī)森林-調(diào)參的案例