5. 過擬合及其避免

Fundamental concepts:generalization(泛化、普遍化、一般化);fitting (擬合)and overfitting(過擬合);complexity control(復(fù)雜度控制)。

Exemplary techniques:cross-validation(交叉驗證);attribute selection(特征/屬性選擇);tree pruning(樹剪枝);regularization(正則化)。

Generalization(泛化):指一個模型對于學(xué)習(xí)集以外的新數(shù)據(jù)的適應(yīng)性。


Overfitting Examined

在討論怎么應(yīng)對過擬合之前,我們先要知道如何識別過擬合。


Holdout Data(測試數(shù)據(jù)) and Fitting Graphs(擬合圖形)

Fitting Graph:擬合圖形以一個復(fù)雜度函數(shù)的形式來展示模型的精確程度。

為了檢測過擬合,需要引入一個數(shù)據(jù)科學(xué)的概念,holdout data(留出法,留出數(shù)據(jù))。

直接點說就是把學(xué)習(xí)集分一些數(shù)據(jù)出來當(dāng)做模型驗證數(shù)據(jù),當(dāng)留出法數(shù)據(jù)在這個場景下被使用時,通常被叫做“測試集”(相比學(xué)習(xí)集而言)。

模型結(jié)果函數(shù)越復(fù)雜,對學(xué)習(xí)集的擬合度則越高,但對測試集的貼合度會降低,這是一個反向關(guān)系,使用這個反向關(guān)系來尋找合適的模型函數(shù)的復(fù)雜度,以避免過擬合狀況的發(fā)生。(可參考下圖擬合圖進(jìn)行查看)


圖5-1 擬合圖,可以看到隨著復(fù)雜度提高,對學(xué)習(xí)集更貼合,但對測試集更偏離

關(guān)于前面的churn案例的一個擬合圖,如下圖5-2所示:


圖5-2 關(guān)于churn問題的擬合圖

關(guān)于churn的擬合圖中錯誤率的判斷,基于churn數(shù)據(jù)表中對target variable的yes和no的定義,即已知對于新加入的要素,默認(rèn)不會churn也就是不會換運營商,新元素no churn=right,churn=wrong?;谌繕颖鞠?,會有一個每年固定的churn幾率,這個固定的churn幾率即為y軸上b的值,這個幾率就叫做基礎(chǔ)概率即base rate,在樸素貝葉斯的概率預(yù)測方法中,base rate被使用的較為廣泛,后續(xù)章節(jié)會有相關(guān)介紹。

Overfitting in Tree Induction(決策樹方法中的過擬合)


決策樹的每一個葉子節(jié)點是否要拆分的依據(jù)是查看當(dāng)前該葉子節(jié)點中的所有元素是否有同樣的target variable值,若都相同,則不用再拆分,當(dāng)做葉子節(jié)點處理。

決策樹的復(fù)雜程度取決于它的節(jié)點數(shù)量。

圖5-3 一個典型的決策樹擬合曲線

決策樹擬合曲線左側(cè),樹小且預(yù)測精度低,右側(cè)精度高??梢钥闯鲈趕weet spot右側(cè),學(xué)習(xí)集適配度隨著節(jié)點增多而增加,但是測試集準(zhǔn)確度隨著節(jié)點增多而降低,復(fù)雜度多過sweet spot時就發(fā)生了過擬合。

不幸的是,目前還沒有一個理論型的方法可以預(yù)測何時能達(dá)到這個sweet spot,只能憑借經(jīng)驗主義來做判斷。


Overfitting in Mathematical Functions(數(shù)學(xué)函數(shù)的過擬合)

增加函數(shù)復(fù)雜度可能有以下情形:

1.? 增加變量的數(shù)量(即公式中x_{i} 的數(shù)量,i=1,2,3...);

2. 增加非線性變量,如新增變量x_{4} =x_{1}^2;

3. 增加非線性變量,如新增變量x_{5} =x_{2} /x_{3} ;

此時目標(biāo)函數(shù)變?yōu)椋?img class="math-inline" src="https://math.jianshu.com/math?formula=f(x)%3Dw_%7B0%7D%20%2Bw_%7B1%7D%20x_%7B1%7D%20%2Bw_%7B2%7D%20x_%7B2%7D%20%2Bw_%7B3%7D%20x_%7B3%7D%20%2Bw_%7B4%7D%20x_%7B4%7D%20%20%2Bw_%7B5%7D%20x_%7B5%7D%20" alt="f(x)=w_{0} +w_{1} x_{1} +w_{2} x_{2} +w_{3} x_{3} +w_{4} x_{4} +w_{5} x_{5} " mathimg="1">

這個就是一個典型的非直線函數(shù),并且典型來說,更多參數(shù)也就是更高維度,一般帶來更高的預(yù)測準(zhǔn)確度。


Example: Overfitting Linear Functions

這里還通過之前的鳶尾花的花瓣和花萼寬度的例子來解釋線性函數(shù)的過擬合。


圖5-6 圖中標(biāo)注了區(qū)分2中鳶尾花的曲線,當(dāng)新增一個干擾元素(五星處的元素)時,邏輯回歸得到的曲線由原來的增函數(shù)變?yōu)榱藴p函數(shù),可明顯看到產(chǎn)生了過擬合的現(xiàn)象,而支持向量機的統(tǒng)計結(jié)果沒有太大變化,過擬合現(xiàn)象不顯著

下面我們將原先的2個變量引申為3個變量,即原先的花瓣寬度(petal width)、花萼寬度(sepal width)加上花萼寬度的平方,得到下圖所示的曲線:

圖5-7 可以看到加上平方變量后,兩種模型下的線都變成了曲線,但邏輯回歸的結(jié)果還是由于出現(xiàn)了干擾元素產(chǎn)生了顯著的過擬合表現(xiàn)

加入平方變量后,分割線均變?yōu)榱藪佄锞€(parabola)。


*Example: Why Is Overfitting Bad?

這個小節(jié)會討論過擬合如何產(chǎn)生和為何產(chǎn)生,這節(jié)不重要,跳過也不影響學(xué)習(xí)。

模型越復(fù)雜,就越有可能產(chǎn)生有害的假的關(guān)聯(lián)關(guān)系(feature和target variable之間的關(guān)聯(lián)關(guān)系),這種錯誤關(guān)聯(lián)關(guān)系的泛化影響了對學(xué)習(xí)集以外的新元素的target variable的預(yù)測,從而降低了模型預(yù)測的準(zhǔn)確度


表5-1 學(xué)習(xí)集數(shù)據(jù)

可以發(fā)現(xiàn)通過上述學(xué)習(xí)集,得出:

1. x=p時,75%可能性class是c1,25%可能性class是c2,所以可以通過x進(jìn)行class預(yù)測;

2. 當(dāng)已經(jīng)計入x變量后再添加y變量,則y對class的預(yù)測不起作用,即x=p時y=r則class都是c1,x=p時y=s則class都是c2,在決策樹中不具備新的預(yù)測意義;

3. 但是可以得出結(jié)論x=p并且y=r時,class必為c1,這個節(jié)點的增加可以獲得新的information gain,但是卻把整體模型的預(yù)測錯誤率從25%提高到30%,也就是增加的information gain同時增加了錯誤率。

從這個案例總結(jié)出:

1. 這種過擬合現(xiàn)象不僅出現(xiàn)在決策樹模型中,只是決策樹模型中更明顯能看出來;

2. 這種現(xiàn)象并不是表5-1的數(shù)據(jù)特殊性導(dǎo)致的,所有數(shù)據(jù)集都會出現(xiàn)類似的問題;

3. 沒有一個通用的理論方案來提前知道這個模型是否已經(jīng)過擬合了,所以一定要留下一個holdout set(即測試集)來對過擬合現(xiàn)象的發(fā)生進(jìn)行判斷。


From Holdout Evaluation to Cross-validation(從“維持?jǐn)?shù)據(jù)”評估到交叉驗證)

交叉驗證的步驟如下:

1. 將數(shù)據(jù)集分成k個部分并且分別進(jìn)行標(biāo)簽標(biāo)記,這些部分命名為folds(子類),通常情況下k會取5或者10;

2. 隨后對分組好的數(shù)據(jù)進(jìn)行k次模型學(xué)習(xí)和模型驗證的迭代,在每一次迭代中,一個不同的子類被選做測試集,此時其他幾個子類共同組成學(xué)習(xí)集,所以每一個迭代都會有(k-1)/k的數(shù)據(jù)當(dāng)做學(xué)習(xí)集,有1/k的數(shù)據(jù)當(dāng)做測試集。

交叉驗證的過程直觀展現(xiàn)如下圖:


圖5-9 如圖所示通過交叉驗證過程,得到了5個不同準(zhǔn)確度的結(jié)果,后續(xù)可通過這些結(jié)果來計算平均準(zhǔn)確率和方差

3. 通過k次迭代后,可以得到k個不同的模型結(jié)果,可通過這k個結(jié)果計算出平均值和標(biāo)準(zhǔn)差。

(得到平均值就是數(shù)字化的預(yù)測結(jié)果,而標(biāo)準(zhǔn)差則是浮動范圍)


The Churn Dataset Revisited(churn數(shù)據(jù)集再臨)

圖5-10 圖示為churn數(shù)據(jù)集的各子類準(zhǔn)確度,上方是邏輯回歸模型,下方是決策樹模型

通過這個數(shù)據(jù)實踐可以發(fā)現(xiàn)如下幾個點:

1. 各子類平均準(zhǔn)確度為68.6%,而之前章節(jié)全量數(shù)據(jù)當(dāng)學(xué)習(xí)集時的預(yù)測準(zhǔn)確度為73%,可見全量數(shù)據(jù)做學(xué)習(xí)集時出現(xiàn)了顯著的過擬合現(xiàn)象;

2. 不同子類的預(yù)測準(zhǔn)確度有差異,所以取平均值是一個好主意,同時也可以使用這些數(shù)據(jù)產(chǎn)生的方差;

3. 對比邏輯回歸和決策樹的結(jié)果,發(fā)現(xiàn)兩種模型在分組3精確度都不高,在分組10精確度都較高,但兩種模式是不同的,并且邏輯回歸展示了較低的整體準(zhǔn)確度64.1%和較高的標(biāo)準(zhǔn)差1.3,所以在這個數(shù)據(jù)集上面,決策樹更適用,因為準(zhǔn)確度高并且預(yù)測結(jié)果更穩(wěn)定(方差較小),但這個不是絕對的,換到其他數(shù)據(jù)集,結(jié)果就完全不一樣了。


Learning Curves(學(xué)習(xí)曲線)

模型的泛化表現(xiàn)和學(xué)習(xí)集數(shù)據(jù)數(shù)量的關(guān)系被叫做學(xué)習(xí)曲線(learning curve)。

學(xué)習(xí)曲線(learning curve)展示的是基于測試集的泛化表現(xiàn),針對訓(xùn)練集的數(shù)據(jù)數(shù)量來統(tǒng)計,和訓(xùn)練集數(shù)據(jù)量相對應(yīng)(x軸)。

擬合圖(fitting graph)展示泛化表現(xiàn)同時也展示模型在學(xué)習(xí)集的表現(xiàn),但是和模型的復(fù)雜度相對應(yīng)(x軸),擬合圖中訓(xùn)練集數(shù)據(jù)量通常不會變化。

圖5-11 針對churn問題的決策樹方法&邏輯回歸方法的學(xué)習(xí)曲線。當(dāng)學(xué)習(xí)集(x軸)擴張時,泛化表現(xiàn)(y軸)增長。但兩種模型下泛化水平的增長速度不同。邏輯回歸方法彈性較小,使它在小樣本量的時候過擬合現(xiàn)象較弱,但也降低了全量數(shù)據(jù)時復(fù)雜建模的準(zhǔn)確度。決策樹的方法彈性更好,所以在小學(xué)習(xí)集時過擬合現(xiàn)象顯著,但學(xué)習(xí)集擴張時可以適應(yīng)更好的復(fù)雜規(guī)律。

Overfitting Avoidance and Complexity Control

先從決策樹模型開始,逐漸得到一個可適用于多種模型的廣泛的避免過擬合的機制(mechanism)。

Avoiding Overfitting with Tree Induction

決策樹中一般使用的避免過擬合方法有以下兩種:

1. 在決策樹過于龐大前停止擴張;

2. 持續(xù)擴張決策樹,然后回刪“prune”決策樹,減小它的規(guī)模。

關(guān)于控制決策樹的復(fù)雜度的方法包括:

1. 限制每個葉子節(jié)點的最小元素個數(shù)。那么這個最小個數(shù)怎么定呢?

統(tǒng)計學(xué)家使用了一種假設(shè)測試“hypothesis test”。在停止擴張決策樹時,先判定增加節(jié)點獲得的information gain是否是通過運氣(chance)獲得的,如果不是通過運氣獲得的,那么就繼續(xù)擴張決策樹。這個判斷基于一個顯著性(p-value),通過p-value來定義分叉后的差異是否是由運氣產(chǎn)生的,通常這個幾率使用5%。

2. 對一個大的決策樹進(jìn)行刪節(jié)點“prune”,表示使用葉子節(jié)點來替換其他的葉子節(jié)點或分叉節(jié)點。

這個方法取決于替換后,模型的準(zhǔn)確度是否會降低,這個過程可以持續(xù)迭代直到任何一次替換都會降低模型準(zhǔn)確度為止。

那么接下來思考下,如果我們使用所有類型的復(fù)雜度來制作決策樹會怎樣?例如,搭一個節(jié)點就停止,然后再搭一個2節(jié)點的樹,再另外搭一個三節(jié)點的樹,然后得到了一堆不同復(fù)雜度的決策樹,然后只要有一個方法能證明模型的泛化表現(xiàn),那么我們就可以選擇到泛化表現(xiàn)最好的這個模型。(應(yīng)該是拿來承上啟下的一段)

A General Method for Avoiding Overfitting(避免過擬合的通用方法)

嵌套留出測試(nested holdout testing):將原有的學(xué)習(xí)集進(jìn)行再次拆分,拆為子學(xué)習(xí)集(訓(xùn)練集)和子確認(rèn)集(validation set for clarity),然后通過子學(xué)習(xí)集來訓(xùn)練模型,然后用子確認(rèn)集來驗證。

嵌套交叉驗證(nested cross-validation):假如我們要對一組數(shù)據(jù)進(jìn)行建模,這組數(shù)據(jù)有一個未知的復(fù)雜度變量C,此時首先對交叉驗證中的每個場景(即n個fold(組)為訓(xùn)練集,1個fold為測試集)進(jìn)行一次僅針對訓(xùn)練集數(shù)據(jù)的交叉驗證,得到此時的最優(yōu)C值,找到這個場景下的最優(yōu)復(fù)雜度情況,然后再使用這個C值來進(jìn)行真正的全場景全fold的交叉驗證。(與一般的交叉驗證的區(qū)別在于,先只用訓(xùn)練集數(shù)據(jù)找到最優(yōu)復(fù)雜度參數(shù)C,再執(zhí)行全數(shù)據(jù)的交叉驗證)

來使用決策樹方法簡單解釋下嵌套交叉驗證,根據(jù)圖5-3所示,最優(yōu)準(zhǔn)確率的決策樹節(jié)點數(shù)是122個,那么就先用子訓(xùn)練集和確認(rèn)集來得到122節(jié)點的這個數(shù)值,然后再使用122這個節(jié)點數(shù),來對全訓(xùn)練集數(shù)據(jù)進(jìn)行建模,此處的122個節(jié)點數(shù)就可以當(dāng)做復(fù)雜度參數(shù)C。

若使用嵌套交叉驗證對5個fold的數(shù)據(jù)集進(jìn)行分析,那么需要進(jìn)行30次建模,即對每個折疊情況下的訓(xùn)練集進(jìn)行子訓(xùn)練集和確認(rèn)集的拆分的時候,將4個原訓(xùn)練集的fold再拆成5份進(jìn)行參數(shù)C的確認(rèn),此時每個outerloop的inner loop包含5個模型(共6個),故一共需要30次建模,可參考下圖及鏈接:

https://baijiahao.baidu.com/s?id=1669711016391829371&wfr=spider&for=pc

序列向前選擇(sequential forward selection - SFS):仍然是測試集(拆分為子測試集和確認(rèn)集)、驗證集,當(dāng)有n多個特征時,先使用一個feature建模,然后加上第二個,選擇其中最好的,然后加上第三個在三個feature的模型中選最好的,以此類推,逐個增加,直到增加feature不能讓確認(rèn)集數(shù)據(jù)預(yù)測更準(zhǔn)確為止,此時使用的feature就是建立整個數(shù)據(jù)集模型要使用的feature。(同樣也可以先用全量feature建模,然后一個一個減少,方法類似,名稱為sequential backward elimination)


* Avoiding Overfitting for Parameter Optimization(參數(shù)最優(yōu)化中的過擬合預(yù)防)

正則化(regularization):將數(shù)字化的回歸函數(shù)結(jié)果簡單化的過程,模型擬合度越高越好,同時越簡單也越好。

邏輯回歸的正則化表達(dá)式如下:

arg\cdot max[g_{likelihood}(x,w)-\lambda \times penalty(w) ]

其中,g_{likelihood}(x,w) 是針對這個回歸的最佳模型結(jié)果,\lambda 是懲罰系數(shù),penalty(w)是懲罰函數(shù)。

通過給原有的最佳模型增加懲罰函數(shù)來調(diào)整最終結(jié)果,得到正則化后的數(shù)學(xué)表達(dá)式。

最常用到的懲罰是各系數(shù)(各w值)的平方和,通常叫做w的L2范數(shù)(L2-norm of w),當(dāng)系數(shù)很大時,w值的平方和會是一個很大的懲罰值(較大的正值或負(fù)值w會使模型更貼合學(xué)習(xí)集數(shù)據(jù),同時也會使L2范數(shù)變大即懲罰增大,以此來應(yīng)對過擬合)。

嶺回歸(ridge? regression):是一種專用于共線性數(shù)據(jù)分析的有偏估計回歸方法,實質(zhì)上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價獲得回歸系數(shù)更為符合實際、更可靠的回歸方法,對病態(tài)數(shù)據(jù)的擬合要強于最小二乘法(least-squares linear regression)(將L2-norm懲罰應(yīng)用在最小二乘法上之后得到的模型結(jié)果)。

最小二乘法(ordinary least squares):最小二乘法是解決曲線擬合問題最常用的方法。其基本思路是:令

f(x)=a_{1} \varphi _{1}(x)+a_{2} \varphi _{2}(x)+\cdot \cdot \cdot +a_{m} \varphi _{m}(x)

其中,\varphi _{k}(x)是事先選定的一組線性無關(guān)的函數(shù),a_{k} (k=1、2...m,m<n)是待定系數(shù),擬合準(zhǔn)則是使y_{i} (y=1,2...n)與f(x_{i} )的距離\delta _{i} 的平方和最小,稱為最小二乘準(zhǔn)則。

如果不使用系數(shù)平方和,而使用系數(shù)的絕對值來當(dāng)做懲罰函數(shù),此時叫做L1范數(shù)(L1-norm),加上懲罰后的模型稱為lasso(LASSO回歸)或者L1正則化(L1-regularization)。

L1正則化會使很多系數(shù)歸零,并且可以通過系數(shù)歸零來進(jìn)行feature的選擇。

支持向量機的正則化表達(dá)式如下:

arg\cdot max[-g_{hinge}(x,w)-\lambda \times penalty(w) ]

相比于邏輯回歸,支持向量機中把最佳函數(shù)更換為hinge loss(鉸鏈損失)判定函數(shù)的擬合度,鉸鏈損失越低擬合度越好,所以函數(shù)前面加了負(fù)號。

grid search(網(wǎng)格搜索):在所有候選的參數(shù)選擇中,通過循環(huán)遍歷,嘗試每一種可能性,表現(xiàn)最好的參數(shù)就是最終的結(jié)果。其原理就像是在數(shù)組里找最大值。(為什么叫網(wǎng)格搜索?以有兩個參數(shù)的模型為例,參數(shù)a有3種可能,參數(shù)b有4種可能,把所有可能性列出來,可以表示成一個3*4的表格,其中每個cell就是一個網(wǎng)格,循環(huán)過程就像是在每個網(wǎng)格里遍歷、搜索,所以叫g(shù)rid search),本書中所提到的嵌套交叉驗證尋找最優(yōu)解的過程也被叫做網(wǎng)格搜索。


Sidebar:Beware of “multiple comparisons”(注意多重比較)

場景簡介:你的投資公司要成立一個投資基金,將資金投入到1000個基金中,每個基金包含了若干隨機挑選的股票,5年后,這些基金有些漲了有些跌了,你可以清算掉跌的,留下漲的,然后宣稱你的公司投資回報率很好。

更直觀比喻,拿1000個硬幣扔很多次,肯定會有某個硬幣正面朝上的概率高于50%很多,那么找到這個硬幣當(dāng)成最好的硬幣,其實是很傻逼的一種決策。這種問題就叫做多重比較問題。

也就是說通過學(xué)習(xí)集來得到的多個不同復(fù)雜度的模型,就像這多個硬幣一樣,從這里挑選出來的最優(yōu)模型,在進(jìn)行預(yù)測時,可能也會遇到“最好硬幣”相同的問題,即多重比較誤區(qū)。


Summary

總結(jié)就是順了一遍前面講的知識點,沒啥新內(nèi)容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容