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)行查看)

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

關(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ù)量。

決策樹擬合曲線左側(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ù)量(即公式中的數(shù)量,i=1,2,3...);
2. 增加非線性變量,如新增變量;
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ù)的過擬合。

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

加入平方變量后,分割線均變?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)確度

可以發(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)如下圖:

3. 通過k次迭代后,可以得到k個不同的模型結(jié)果,可通過這k個結(jié)果計算出平均值和標(biāo)準(zhǔn)差。
(得到平均值就是數(shù)字化的預(yù)測結(jié)果,而標(biāo)準(zhǔn)差則是浮動范圍)
The Churn Dataset Revisited(churn數(shù)據(jù)集再臨)

通過這個數(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ù)量通常不會變化。

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次建模,可參考下圖及鏈接:

序列向前選擇(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á)式如下:
其中,是針對這個回歸的最佳模型結(jié)果,
是懲罰系數(shù),
是懲罰函數(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):最小二乘法是解決曲線擬合問題最常用的方法。其基本思路是:令
其中,是事先選定的一組線性無關(guān)的函數(shù),
(k=1、2...m,m<n)是待定系數(shù),擬合準(zhǔn)則是使
(y=1,2...n)與
的距離
的平方和最小,稱為最小二乘準(zhǔn)則。
如果不使用系數(shù)平方和,而使用系數(shù)的絕對值來當(dāng)做懲罰函數(shù),此時叫做L1范數(shù)(L1-norm),加上懲罰后的模型稱為lasso(LASSO回歸)或者L1正則化(L1-regularization)。
L1正則化會使很多系數(shù)歸零,并且可以通過系數(shù)歸零來進(jìn)行feature的選擇。
支持向量機的正則化表達(dá)式如下:
相比于邏輯回歸,支持向量機中把最佳函數(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)容。