在上一章中,我們通過幾個(gè)回歸模型講解了機(jī)器學(xué)習(xí)建模的一般流程。當(dāng)我們完成一個(gè)模型的建模訓(xùn)練預(yù)測就相當(dāng)于完成了一個(gè)基本的baseline,接下來的工作就是優(yōu)化模型,讓模型在測試集獲得更好的分?jǐn)?shù),那么如何優(yōu)化呢?這就是本次要涉及的內(nèi)容。
1. 數(shù)據(jù)集的劃分
首先我們明確一下機(jī)器學(xué)習(xí)數(shù)據(jù)集的劃分。
我們都知道機(jī)器學(xué)習(xí)是通過學(xué)習(xí)現(xiàn)有的數(shù)據(jù)來構(gòu)建模型。但是最終我們需要用這個(gè)模型來預(yù)測其在之前沒有見過的數(shù)據(jù)集上的表現(xiàn)。例如我們根據(jù)股票市場前六個(gè)月的數(shù)據(jù)擬合一個(gè)預(yù)測模型,我們的目的不是為了預(yù)測以前這六個(gè)月越準(zhǔn)越好,而是預(yù)測明天乃至未來的股價(jià)變化。
也就是說在模型訓(xùn)練過程中,模型還沒有部署到線上,這個(gè)時(shí)候我們不知道模型會(huì)遇到什么樣的真實(shí)數(shù)據(jù)。因而在測試集未知的情況下,我們需要將手中已經(jīng)擁有的數(shù)據(jù)集進(jìn)行劃分,一般可以分為訓(xùn)練集和測試集。訓(xùn)練集用于模型建模迭代和優(yōu)化。而測試集用于對模型的準(zhǔn)確度進(jìn)行檢驗(yàn)。
對于部分機(jī)器學(xué)習(xí)任務(wù),我們劃分的測試集必須是模型從未見過的數(shù)據(jù),比如語音識(shí)別中一個(gè)完全不同的人的說話聲,圖像識(shí)別中一個(gè)完全不同的識(shí)別個(gè)體。這時(shí),一般來說,訓(xùn)練集和驗(yàn)證集的數(shù)據(jù)分布是同分布的,而測試集的數(shù)據(jù)分布與前兩者會(huì)略有不同。在這種情況下,通常,測試集的正確率會(huì)比驗(yàn)證集的正確率低得多,這樣就可以看出模型的泛化能力,可以預(yù)測出實(shí)際應(yīng)用中的真實(shí)效果。
2. 方差與偏差
在有監(jiān)督學(xué)習(xí)中,偏差是指預(yù)測值和實(shí)際值的差值;方差是指模型在同一分布的多個(gè)測試集上的表現(xiàn)差別。偏差可以用“準(zhǔn)”來形容,方差可以用“確”來形容。比如,我們打靶,偏差小說明我們子彈射中點(diǎn)離靶心的平均距離很近;方差小說明我們子彈射中點(diǎn)比較集中。

在回歸中,我們最常用的評(píng)價(jià)指標(biāo)為均方誤差,即MSE: mean square error
,
其中是樣本
應(yīng)用建立的模型
預(yù)測的結(jié)果。
如果我們所用的數(shù)據(jù)是訓(xùn)練集上的數(shù)據(jù),那么這個(gè)誤差為訓(xùn)練均方誤差,如果我們使用測試集的數(shù)據(jù)計(jì)算的均方誤差,我們稱為測試均方誤差。一般而言,我們并不關(guān)心模型在訓(xùn)練集上的訓(xùn)練均方誤差,我們關(guān)心的是模型面對未知的樣本集,即測試集上的測試誤差,我們的目標(biāo)是使得我們建立的模型在測試集上的測試誤差最小。那我們?nèi)绾芜x擇一個(gè)測試誤差最小的模型呢?這是個(gè)棘手的問題,因?yàn)樵谀P徒㈦A段,我們是不能得到測試數(shù)據(jù)的,比如:我們在模型未上線之前是不能拿到未知且真實(shí)的測試數(shù)據(jù)來驗(yàn)證我們的模型的。在這種情況下,為了簡便起見,一些觀點(diǎn)認(rèn)為通過訓(xùn)練誤差最小化來選擇模型也是可行的。這種觀點(diǎn)表面看上去是可行的,但是存在一個(gè)致命的缺點(diǎn),那就是:一個(gè)模型的訓(xùn)練均方誤差最小時(shí),不能保證測試均方誤差同時(shí)也很小。對于這種想法構(gòu)造的模型,一般在訓(xùn)練誤差達(dá)到最小時(shí),測試均方誤差一般很大!如圖:

在左圖中由真實(shí)函數(shù)產(chǎn)生的數(shù)據(jù)用黑色曲線表示。
三種對的估計(jì): 線性回歸(橙色曲線),兩條光滑樣條擬合(綠色和藍(lán)色)右圖:訓(xùn)練均方誤差(灰色曲線),測試均方誤差(紅色曲線)
可以看到:當(dāng)我們的模型的訓(xùn)練均方誤差達(dá)到很小時(shí),測試均方誤差反而很大,但是我們尋找的最優(yōu)的模型是測試均方誤差達(dá)到最小時(shí)對應(yīng)的模型,因此基于訓(xùn)練均方誤差達(dá)到最小選擇模型本質(zhì)上是行不同的。正如上右圖所示:模型在訓(xùn)練誤差很小,但是測試均方誤差很大時(shí),我們稱這種情況叫模型的過擬合。
過擬合的本質(zhì)是偏差小、方差大,而與之相對應(yīng)的欠擬合的本質(zhì)是偏差大,方差小。
從上圖的測試均方誤差曲線可以看到:測試均方誤差曲線呈現(xiàn)U型曲線,這表明了在測試誤差曲線中有兩種力量在互相博弈??梢宰C明:
也就是說,我們的測試均方誤差的期望值可以分解為的方差、
的偏差平方和誤差項(xiàng)
的方差。為了使得模型的測試均方誤差達(dá)到最小值,也就是同時(shí)最小化偏差的平方和方差。由于我們知道偏差平方和方差本身是非負(fù)的,因此測試均方誤差的期望不可能會(huì)低于誤差的方差,因此我們稱
為建模任務(wù)的難度,這個(gè)量在我們的任務(wù)確定后是無法改變的,也叫做不可約誤差。那么模型的方差和偏差的平方和究竟是什么呢?
所謂模型的方差就是:用不同的數(shù)據(jù)集去估計(jì)時(shí),估計(jì)函數(shù)的改變量。舉個(gè)例子:我們想要建立一個(gè)線性回歸模型,可以通過輸入中國人身高去預(yù)測我們的體重。但是顯然我們沒有辦法把全中國13億人做一次人口普查,拿到13億人的身高體重去建立模型。我們能做的就是從13億中抽1000個(gè)樣本進(jìn)行建模,我們對這個(gè)抽樣的過程重復(fù)100遍,就會(huì)得到100個(gè)1000人的樣本集。我們使用線性回歸模型估計(jì)參數(shù)就能得到100個(gè)線性回歸模型。由于樣本抽取具有隨機(jī)性,我們得到的100個(gè)模型不可能參數(shù)完全一樣,那么這100個(gè)模型之間的差異就叫做方差。
顯然,我們希望得到一個(gè)穩(wěn)定的模型,也就是在不同的樣本集估計(jì)的模型都不會(huì)相差太大,即要求f的方差越小越好。一般來說,模型的復(fù)雜度越高,f的方差就會(huì)越大。 如加入二次項(xiàng)的模型的方差比線性回歸模型的方差要大。
這里在補(bǔ)充兩個(gè)概念:
- 基于偏差的誤差:主要是指預(yù)測值和真實(shí)值之間的差距,或者偏離程度,主要是用于評(píng)價(jià)模型的預(yù)測能力。
- 基于方差的誤差:主要是描述了一個(gè)模型對給定的數(shù)據(jù)進(jìn)行預(yù)測的可變性。主要用于評(píng)價(jià)模型的穩(wěn)定性或者健壯性。

最終的目的是要衡方差與偏差,從而得到一個(gè)合理的模型。一般而言,增加模型的復(fù)雜度,會(huì)增加模型的方差,但是會(huì)減少模型的偏差,我們要找到一個(gè)方差--偏差的權(quán)衡,使得測試均方誤差最小。
3. 特征提取
在前面的討論中,我們已經(jīng)明確一個(gè)目標(biāo),就是:我們要選擇一個(gè)測試誤差達(dá)到最小的模型。但是實(shí)際上我們很難對實(shí)際的測試誤差做精確的計(jì)算,因此我們要對測試誤差進(jìn)行估計(jì),估計(jì)的方式有兩種:訓(xùn)練誤差修正與交叉驗(yàn)證。
- 訓(xùn)練誤差修正:
前面的討論我們已經(jīng)知道,模型越復(fù)雜,訓(xùn)練誤差越小,測試誤差先減后增。因此,我們先構(gòu)造一個(gè)特征較多的模型使其過擬合,此時(shí)訓(xùn)練誤差很小而測試誤差很大,那這時(shí)我們加入關(guān)于特征個(gè)數(shù)的懲罰。因此,當(dāng)我們的訓(xùn)練誤差隨著特征個(gè)數(shù)的增加而減少時(shí),懲罰項(xiàng)因?yàn)樘卣鲾?shù)量的增加而增大,抑制了訓(xùn)練誤差隨著特征個(gè)數(shù)的增加而無休止地減小。具體的數(shù)學(xué)量如下:
,其中d為模型特征個(gè)數(shù),
,
為模型預(yù)測誤差的方差的估計(jì)值,即殘差的方差。
AIC赤池信息量準(zhǔn)則:
BIC貝葉斯信息量準(zhǔn)則:
- 交叉驗(yàn)證:
前面討論的對訓(xùn)練誤差修正得到測試誤差的估計(jì)是間接方法,這種方法的橋梁是訓(xùn)練誤差,而交叉驗(yàn)證則是對測試誤差的直接估計(jì)。交叉驗(yàn)證比訓(xùn)練誤差修正的優(yōu)勢在于:能夠給出測試誤差的一個(gè)直接估計(jì)。在這里只介紹K折交叉驗(yàn)證:我們把訓(xùn)練樣本分成K等分,然后用K-1個(gè)樣本集當(dāng)做訓(xùn)練集,剩下的一份樣本集為驗(yàn)證集去估計(jì)由K-1個(gè)樣本集得到的模型的精度,這個(gè)過程重復(fù)K次取平均值得到測試誤差的一個(gè)估計(jì)。5折交叉驗(yàn)證如下圖:(藍(lán)色的是訓(xùn)練集,黃色的是驗(yàn)證集)

在測試誤差能夠被合理的估計(jì)出來以后,我們做特征選擇的目標(biāo)就是:從p個(gè)特征中選擇m個(gè)特征,使得對應(yīng)的模型的測試誤差的估計(jì)最小。對應(yīng)的方法有:
- 最優(yōu)子集選擇:
(i) 記不含任何特征的模型為,計(jì)算這個(gè)
的測試誤差。
(ii) 在基礎(chǔ)上增加一個(gè)變量,計(jì)算p個(gè)模型的RSS,選擇RSS最小的模型記作
,并計(jì)算該模型
的測試誤差。
(iii) 再增加變量,計(jì)算p-1個(gè)模型的RSS,并選擇RSS最小的模型記作,并計(jì)算該模型
的測試誤差。
(iv) 重復(fù)以上過程知道擬合的模型有p個(gè)特征為止,并選擇p+1個(gè)模型中測試誤差最小的模型作為最優(yōu)模型。
- 向前逐步選擇:
最優(yōu)子集選擇雖然在原理上很直觀,但是隨著數(shù)據(jù)特征維度p的增加,子集的數(shù)量為,計(jì)算效率非常低下且需要的計(jì)算內(nèi)存也很高,在大數(shù)據(jù)的背景下顯然不適用。因此,我們需要把最優(yōu)子集選擇的運(yùn)算效率提高,因此向前逐步選擇算法的過程如下:
(i) 記不含任何特征的模型為,計(jì)算這個(gè)
的測試誤差。
(ii) 在基礎(chǔ)上增加一個(gè)變量,計(jì)算p個(gè)模型的RSS,選擇RSS最小的模型記作
,并計(jì)算該模型
的測試誤差。
(iii) 在最小的RSS模型下繼續(xù)增加一個(gè)變量,選擇RSS最小的模型記作,并計(jì)算該模型
的測試誤差。
(iv) 以此類推,重復(fù)以上過程知道擬合的模型有p個(gè)特征為止,并選擇p+1個(gè)模型中測試誤差最小的模型作為最優(yōu)模型。
4. 主成分分析(principal component analysis,PCA)
主成分分析的思想:通過最大投影方差 將原始空間進(jìn)行重構(gòu),即由特征相關(guān)重構(gòu)為無關(guān),即落在某個(gè)方向上的點(diǎn)(投影)的方差最大。在進(jìn)行下一步推導(dǎo)之前,我們先把樣本均值和樣本協(xié)方差矩陣推廣至矩陣形式:
樣本均值Mean:
樣本協(xié)方差矩陣
最大投影方差的步驟:
(i) 中心化:
(ii) 計(jì)算每個(gè)點(diǎn)至
方向上的投影:
(iii) 計(jì)算投影方差:
(iv) 最大化投影方差求:
得到:
即:
可以看到:為
的特征值,
為
的特征向量。因此我們只需要對中心化后的協(xié)方差矩陣進(jìn)行特征值分解,得到的特征向量即為投影方向。如果需要進(jìn)行降維,那么只需要取p的前M個(gè)特征向量即可。是一種常見的數(shù)據(jù)降維方法,其目的是在“信息”損失較小的前提下,將高維的數(shù)據(jù)轉(zhuǎn)換到低維,從而減小計(jì)算量。下面通過一個(gè)栗子來進(jìn)行討論
在許多領(lǐng)域的研究與應(yīng)用中,通常需要對含有多個(gè)變量的數(shù)據(jù)進(jìn)行觀測,收集大量數(shù)據(jù)后進(jìn)行分析尋找規(guī)律。多變量大數(shù)據(jù)集無疑會(huì)為研究和應(yīng)用提供豐富的信息,但是也在一定程度上增加了數(shù)據(jù)采集的工作量。更重要的是在很多情形下,許多變量之間可能存在相關(guān)性,從而增加了問題分析的復(fù)雜性。如果分別對每個(gè)指標(biāo)進(jìn)行分析,分析往往是孤立的,不能完全利用數(shù)據(jù)中的信息,因此盲目減少指標(biāo)會(huì)損失很多有用的信息,從而產(chǎn)生錯(cuò)誤的結(jié)論。
因此需要找到一種合理的方法,在減少需要分析的指標(biāo)同時(shí),盡量減少原指標(biāo)包含信息的損失,以達(dá)到對所收集數(shù)據(jù)進(jìn)行全面分析的目的。由于各變量之間存在一定的相關(guān)關(guān)系,因此可以考慮將關(guān)系緊密的變量變成盡可能少的新變量,使這些新變量是兩兩不相關(guān)的,那么就可以用較少的綜合指標(biāo)分別代表存在于各個(gè)變量中的各類信息。主成分分析與因子分析就屬于這類降維算法。