7.1 過擬合問題
到現(xiàn)在為止,我們已經(jīng)學(xué)習(xí)了幾種不同的學(xué)習(xí)算法,包括線性回歸和邏輯回歸,它們能夠有效地解決許多問題,但是當(dāng)將它們應(yīng)用到某些特定的機(jī)器學(xué)習(xí)應(yīng)用時(shí),會(huì)遇到過擬合(over-fitting)的問題,可能會(huì)導(dǎo)致它們效果很差。
接下來,我將會(huì)解釋什么是過度擬合問題,并且會(huì)談?wù)撘环N稱為正則化(regularization)的技術(shù),它可以改善或者減少過度擬合問題。
如果我們有非常多的特征,我們通過學(xué)習(xí)得到的假設(shè)可能能夠非常好地適應(yīng)訓(xùn)練集(代價(jià)函數(shù)可能幾乎為0),但是可能會(huì)不能推廣到新的數(shù)據(jù)。
下圖是一個(gè)回歸問題的例子:

第一個(gè)模型是一個(gè)線性模型,欠擬合,不能很好地適應(yīng)我們的訓(xùn)練集;第三個(gè)模型是一個(gè)四次方的模型,過于強(qiáng)調(diào)擬合原始數(shù)據(jù),而丟失了算法的本質(zhì):預(yù)測(cè)新數(shù)據(jù)。我們可以看出,若給出一個(gè)新的值使之預(yù)測(cè),它將表現(xiàn)的很差,是過擬合,雖然能非常好地適應(yīng)我們的訓(xùn)練集但在新輸入變量進(jìn)行預(yù)測(cè)時(shí)可能會(huì)效果不好;而中間的模型似乎最合適。
分類問題中也存在這樣的問題:

就以多項(xiàng)式理解,的次數(shù)越高,擬合的越好,但相應(yīng)的預(yù)測(cè)的能力就可能變差。
問題是,如果我們發(fā)現(xiàn)了過擬合問題,應(yīng)該如何處理?
1.丟棄一些不能幫助我們正確預(yù)測(cè)的特征??梢允鞘止みx擇保留哪些特征,或者使用一些模型選擇的算法來幫忙(例如PCA)
2.正則化。保留所有的特征,但是減少參數(shù)的大?。?b>magnitude)。
7.2 代價(jià)函數(shù)
上面的回歸問題中如果我們的模型是:
我們可以從之前的事例中看出,正是那些高次項(xiàng)導(dǎo)致了過擬合的產(chǎn)生,所以如果我們能讓這些高次項(xiàng)的系數(shù)接近于的話,我們就能很好的擬合了。
所以我們要做的就是在一定程度上減小這些參數(shù)的值,這就是正則化的基本方法。我們決定要減小
和
的大小,我們要做的便是修改代價(jià)函數(shù),在其中
和
設(shè)置一點(diǎn)懲罰。這樣做的話,我們?cè)趪L試最小化代價(jià)時(shí)也需要將這個(gè)懲罰納入考慮中,并最終導(dǎo)致選擇較小一些的
和
。
修改后的代價(jià)函數(shù)如下:
通過這樣的代價(jià)函數(shù)選擇出的和
對(duì)預(yù)測(cè)結(jié)果的影響就比之前要小許多。假如我們有非常多的特征,我們并不知道其中哪些特征我們要懲罰,我們將對(duì)所有的特征進(jìn)行懲罰,并且讓代價(jià)函數(shù)最優(yōu)化的軟件來選擇這些懲罰的程度。這樣的結(jié)果是得到了一個(gè)較為簡(jiǎn)單的能防止過擬合問題的假設(shè):
其中又稱為正則化參數(shù)(Regularization Parameter)。注:根據(jù)慣例,我們不對(duì)
進(jìn)行懲罰。經(jīng)過正則化處理的模型與原模型的可能對(duì)比如下圖所示:

如果選擇的正則化參數(shù)過大,則會(huì)把所有的參數(shù)都最小化了,導(dǎo)致模型變成
,也就是上圖中紅色直線所示的情況,造成欠擬合。
那為什么增加的一項(xiàng)可以使
的值減小呢?
因?yàn)槿绻覀兞?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Clambda%20" alt="\lambda " mathimg="1">的值很大的話,為了使Cost Function盡可能的小,所有的的值(不包括
)都會(huì)在一定程度上減小。
但若的值太大了,那么
(不包括
)都會(huì)趨近于
,這樣我們所得到的只能是一條平行于
軸的直線。
所以對(duì)于正則化,我們要取一個(gè)合理的的值,這樣才能更好的應(yīng)用正則化。
回顧一下代價(jià)函數(shù),為了使用正則化,讓我們把這些概念應(yīng)用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過度擬合了。
7.3 正則化線性回歸
對(duì)于線性回歸的求解,我們之前推導(dǎo)了兩種學(xué)習(xí)算法:一種基于梯度下降,一種基于正規(guī)方程。
正則化線性回歸的代價(jià)函數(shù)為:
如果我們要使用梯度下降法令這個(gè)代價(jià)函數(shù)最小化,因?yàn)槲覀兾磳?duì)進(jìn)行正則化,所以梯度下降算法將分兩種情形:
對(duì)上面的算法中時(shí)的更新式子進(jìn)行調(diào)整可得:
可以看出,正則化線性回歸的梯度下降算法的變化在于,每次都在原有算法更新規(guī)則的基礎(chǔ)上令值減少了一個(gè)額外的值(
)。
我們同樣也可以利用正規(guī)方程來求解正則化線性回歸模型,方法如下所示:

圖中的矩陣尺寸為
7.4? 正則化的邏輯回歸模型
針對(duì)邏輯回歸問題,我們?cè)谥暗恼n程已經(jīng)學(xué)習(xí)過兩種優(yōu)化算法:我們首先學(xué)習(xí)了使用梯度下降法來優(yōu)化代價(jià)函數(shù),接下來學(xué)習(xí)了更高級(jí)的優(yōu)化算法,這些高級(jí)優(yōu)化算法需要你自己設(shè)計(jì)代價(jià)函數(shù)
。

自己計(jì)算導(dǎo)數(shù)同樣對(duì)于邏輯回歸,我們也給代價(jià)函數(shù)增加一個(gè)正則化的表達(dá)式,得到代價(jià)函數(shù):
python代碼:
import?numpy as?np
def?costReg(theta, X, y, learningRate):
? ? ? ? ? ? ? ?theta =?np.matrix(theta)
? ? ? ? ? ? ? ?X =?np.matrix(X)
? ? ? ? ? ? ? ?y =?np.matrix(y)
? ? ? ? ? ? ? ?first =?np.multiply(-y, np.log(sigmoid(X*theta.T)))
? ? ? ? ? ? ???second =?np.multiply((1?-?y), np.log(1?-?sigmoid(X*theta.T)))
? ? ? ? ? ? ? ?reg =?(learningRate /?(2?*?len(X))*?np.sum(
? ? ? ? ? ? ? ? ? ? ? ? ? np.power(theta[:,1:theta.shape[1]],2))
? ? ? ? ? ? ? ?return?np.sum(first -?second) /?(len(X)) +?reg
要最小化該代價(jià)函數(shù),通過求導(dǎo),得出梯度下降算法為:
注:看上去同線性回歸一樣,但是知道,所以與線性回歸不同。