http://www.cnblogs.com/jianxinzhou/p/4083921.html
1. The Problem of Overfitting
1
還是來看預測房價的這個例子,我們先對該數(shù)據(jù)做線性回歸,也就是左邊第一張圖弱判。
如果這么做祖娘,我們可以獲得擬合數(shù)據(jù)的這樣一條直線,但是承冰,實際上這并不是一個很好的模型。我們看看這些數(shù)據(jù),很明顯劲厌,隨著房子面積增大,住房價格的變化趨于穩(wěn)定或者說越往右越平緩哭廉。因此線性回歸并沒有很好擬合訓練數(shù)據(jù)脊僚。
我們把此類情況稱為欠擬合(underfitting),或者叫作叫做高偏差(bias)。
這兩種說法大致相似辽幌,都表示沒有很好地擬合訓練數(shù)據(jù)增淹。高偏差這個詞是 machine learning 的研究初期傳下來的一個專業(yè)名詞,具體到這個問題乌企,意思就是說如果用線性回歸這個算法去擬合訓練數(shù)據(jù)虑润,那么該算法實際上會產生一個非常大的偏差或者說存在一個很強的偏見。
第二幅圖加酵,我們在中間加入一個二次項拳喻,也就是說對于這幅數(shù)據(jù)我們用二次函數(shù)去擬合。自然猪腕,可以擬合出一條曲線冗澈,事實也證明這個擬合效果很好。
另一個極端情況是陋葡,如果在第三幅圖中對于該數(shù)據(jù)集用一個四次多項式來擬合亚亲。因此在這里我們有五個參數(shù)θ0
到θ4,
這樣我們同樣可以擬合一條曲線腐缤,通過我們的五個訓練樣本捌归,我們可以得到如右圖的一條曲線。
一方面岭粤,我們似乎對訓練數(shù)據(jù)做了一個很好的擬合惜索,因為這條曲線通過了所有的訓練實例。但是剃浇,這實際上是一條很扭曲的曲線巾兆,它不停上下波動。因此偿渡,事實上我們并不認為它是一個預測房價的好模型臼寄。
所以,我們把這類情況叫做過擬合(overfitting)溜宽,也叫高方差(variance)吉拳。
與高偏差一樣,
高方差同樣也是一個歷史上的叫法适揉。從第一印象上來說留攒,如果我們擬合一個高階多項式,那么這個函數(shù)能很好的擬合訓練集(能擬合幾乎所有的訓練數(shù)據(jù))嫉嘀,但這也就面臨函數(shù)可能太過龐大的問題炼邀,變量太多。
同時如果我們沒有足夠的數(shù)據(jù)集(訓練集)去約束這個變量過多的模型剪侮,那么就會發(fā)生過擬合拭宁。
2
過度擬合的問題通常發(fā)生在變量(特征)過多的時候洛退。這種情況下訓練出的方程總是能很好的擬合訓練數(shù)據(jù),也就是說杰标,我們的代價函數(shù)可能非常接近于 0 或者就為 0兵怯。
但是,這樣的曲線千方百計的去擬合訓練數(shù)據(jù)腔剂,這樣會導致它無法泛化到新的數(shù)據(jù)樣本中媒区,以至于無法預測新樣本價格。在這里掸犬,**術語"泛化"指的是一個假設模型能夠應用到新樣本的能力袜漩。
**新樣本數(shù)據(jù)是指沒有出現(xiàn)在訓練集中的數(shù)據(jù)。
3
那么胜茧,如果發(fā)生了過擬合問題粘优,我們應該如何處理仇味?
過多的變量(特征)呻顽,同時只有非常少的訓練數(shù)據(jù),會導致出現(xiàn)過度擬合的問題丹墨。因此為了解決過度擬合廊遍,有以下兩個辦法。
方法一:盡量減少選取變量的數(shù)量
具體而言贩挣,我們可以人工檢查每一項變量喉前,并以此來確定哪些變量更為重要,然后王财,保留那些更為重要的特征變量卵迂。至于,哪些變量應該舍棄绒净,我們以后在討論见咒,這會涉及到模型選擇算法,這種算法是可以自動選擇采用哪些特征變量挂疆,自動舍棄不需要的變量改览。這類做法非常有效,但是其缺點是當你舍棄一部分特征變量時缤言,你也舍棄了問題中的一些信息。例如,也許所有的特征變量對于預測房價都是有用的监憎,我們實際上并不想舍棄一些信息或者說舍棄這些特征變量膳叨。
方法二:正則化
正則化中我們將保留所有的特征變量,但是會減小特征變量的數(shù)量級(參數(shù)數(shù)值的大小θ(j))。
這個方法非常有效订晌,當我們有很多特征變量時犬性,其中每一個變量都能對預測產生一點影響。正如我們在房價預測的例子中看到的那樣腾仅,我們可以有很多特征變量乒裆,其中每一個變量都是有用的,因此我們不希望把它們刪掉推励,這就導致了正則化概念的發(fā)生鹤耍。
接下來我們會討論怎樣應用正則化和什么叫做正則化均值,然后將開始討論怎樣使用正則化來使學習算法正常工作验辞,并避免過擬合稿黄。
2. Cost Function
1
在前面的介紹中,我們看到了如果用一個二次函數(shù)來擬合這些數(shù)據(jù)跌造,那么它給了我們一個對數(shù)據(jù)很好的擬合杆怕。然而,如果我們用一個更高次的多項式去擬合壳贪,最終我們可能會得到一個曲線陵珍,它能很好地擬合訓練集,但卻并不是一個好的結果违施,因為它過度擬合了數(shù)據(jù)互纯,因此,一般性并不是很好磕蒲。
讓我們考慮下面的假設留潦,我們想要加上懲罰項,從而使參數(shù) θ3和 θ4足夠的小辣往。
這里我的意思就是兔院,上圖的式子是我們的優(yōu)化目標,也就是說我們需要盡量減少代價函數(shù)的均方誤差站削。對于這個函數(shù)我們對它添加一些項坊萝,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方钻哩,
1000 只是我隨便寫的某個較大的數(shù)字而已∫傺撸現(xiàn)在,如果我們要最小化這個函數(shù)街氢,那么為了最小化這個新的代價函數(shù)扯键,我們要讓 θ3和 θ4 盡可能小。因為珊肃,如果你在原有代價函數(shù)的基礎上加上 1000 乘以 θ3這一項 荣刑,那么這個新的代價函數(shù)將變得很大馅笙,所以,當我們最小化這個新的代價函數(shù)時厉亏, 我們將使 θ3 的值接近于 0董习,同樣 θ4 的值也接近于 0,就像我們忽略了這兩個值一樣爱只。如果我們做到這一點( θ3 和 θ4 接近 0 )皿淋,那么我們將得到一個近似的二次函數(shù)。
因此恬试,我們最終恰當?shù)財M合了數(shù)據(jù)窝趣,我們所使用的正是二次函數(shù)加上一些非常小,貢獻很小項(因為這些項的 θ3训柴、 θ4 非常接近于0)哑舒。顯然,這是一個更好的假設幻馁。
2
更一般地洗鸵,這里給出了正規(guī)化背后的思路。這種思路就是仗嗦,如果我們的參數(shù)值對應一個較小值的話(參數(shù)值比較斜毂酢),那么往往我們會得到一個形式更簡單的假設儒将。
在我們上面的例子中吏祸,我們懲罰的只是 θ3 和 θ4 ,使這兩個值均接近于零钩蚊,從而我們得到了一個更簡單的假設,實際上這個假設大抵上是一個二次函數(shù)蹈矮。但更一般地說砰逻,如果我們像懲罰 θ3 和 θ4 這樣懲罰其它參數(shù),那么我們往往可以得到一個相對較為簡單的假設泛鸟。
實際上蝠咆,這些參數(shù)的值越小,通常對應于越光滑的函數(shù)北滥,也就是更加簡單的函數(shù)刚操。因此 就不易發(fā)生過擬合的問題。
我知道再芋,為什么越小的參數(shù)對應于一個相對較為簡單的假設菊霜,對你來說現(xiàn)在不一定完全理解,但是在上面的例子中使 θ3 和 θ4 很小济赎,并且這樣做能給我們一個更加簡單的假設鉴逞,這個例子至少給了我們一些直觀感受记某。來讓我們看看具體的例子,對于房屋價格預測我們可能有上百種特征构捡,與剛剛所講的多項式例子不同液南,我們并不知道 θ3 和 θ4 是高階多項式的項。所以勾徽,如果我們有一百個特征滑凉,我們并不知道如何選擇關聯(lián)度更好的參數(shù),如何縮小參數(shù)的數(shù)目等等喘帚。
因此在正則化里譬涡,我們要做的事情,就是把減小我們的代價函數(shù)(例子中是線性回歸的代價函數(shù))所有的參數(shù)值啥辨,因為我們并不知道是哪一個或哪幾個要去縮小涡匀。
因此,我們需要修改代價函數(shù)溉知,在這后面添加一項陨瘩,就像我們在方括號里的這項。當我們添加一個額外的正則化項的時候级乍,我們收縮了每個參數(shù)舌劳。
順便說一下,按照慣例玫荣,我們沒有去懲罰 θ0甚淡,因此 θ0 的值是大的。這就是一個約定從 1 到 n 的求和捅厂,而不是從 0 到 n 的求和贯卦。但其實在實踐中這只會有非常小的差異,無論你是否包括這 θ0 這項焙贷。但是按照慣例撵割,通常情況下我們還是只從 θ1 到 θn 進行正則化。
下面的這項就是一個正則化項
λ 要做的就是控制在兩個不同的目標中的平衡關系。
第一個目標就是我們想要訓練故硅,使假設更好地擬合訓練數(shù)據(jù)庶灿。我們希望假設能夠很好的適應訓練集山上。
而第二個目標是我們想要保持參數(shù)值較小眼耀。(通過正則化項)
而 λ 這個正則化參數(shù)需要控制的是這兩者之間的平衡,即平衡擬合訓練的目標和保持參數(shù)值較小的目標佩憾。從而來保持假設的形式相對簡單哮伟,來避免過度的擬合。
對于我們的房屋價格預測來說妄帘,我們之前所用的非常高的高階多項式來擬合楞黄,我們將會得到一個非常彎曲和復雜的曲線函數(shù),現(xiàn)在我們只需要使用正則化目標的方法抡驼,那么你就可以得到一個更加合適的曲線鬼廓,但這個曲線不是一個真正的二次函數(shù),而是更加的流暢和簡單的一個曲線致盟。這樣就得到了對于這個數(shù)據(jù)更好的假設碎税。
再一次說明下,這部分內容的確有些難以明白馏锡,為什么加上參數(shù)的影響可以具有這種效果雷蹂?但如果你親自實現(xiàn)了正規(guī)化,你將能夠看到這種影響的最直觀的感受杯道。
3
在正則化線性回歸中匪煌,如果正則化參數(shù)值 λ 被設定為非常大,那么將會發(fā)生什么呢党巾?
我們將會非常大地懲罰參數(shù)θ1 θ2 θ3 θ4 … 也就是說萎庭,我們最終懲罰θ1 θ2 θ3 θ4 … 在一個非常大的程度,那么我們會使所有這些參數(shù)接近于零昧港。
如果我們這么做擎椰,那么就是我們的假設中相當于去掉了這些項,并且使我們只是留下了一個簡單的假設创肥,這個假設只能表明房屋價格等于 θ0 的值,那就是類似于擬合了一條水平直線值朋,對于數(shù)據(jù)來說這就是一個欠擬合 (underfitting)叹侄。這種情況下這一假設它是條失敗的直線,對于訓練集來說這只是一條平滑直線昨登,它沒有任何趨勢趾代,它不會去趨向大部分訓練樣本的任何值。
這句話的另??一種方式來表達就是這種假設有過于強烈的"偏見" 或者過高的偏差 (bais)丰辣,認為預測的價格只是等于 θ0 撒强。對于數(shù)據(jù)來說這只是一條水平線禽捆。
因此,為了使正則化運作良好飘哨,我們應當注意一些方面胚想,應該去選擇一個不錯的正則化參數(shù) λ 。當我們以后講到多重選擇時我們將討論一種方法來自動選擇正則化參數(shù) λ 芽隆,為了使用正則化浊服,接下來我們將把這些概念應用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過度擬合了胚吁。
3. Regularized Linear Regression
對于線性回歸(的求解),我們之前運用了兩種學習算法腕扶,一種基于梯度下降孽拷,一種基于正規(guī)方程。1
2
3
現(xiàn)在考慮 M(即樣本量), 比 N(即特征的數(shù)量)小或等于N代虾。
通過之前的博文进肯,我們知道如果你只有較少的樣本,導致特征數(shù)量大于樣本數(shù)量棉磨,那么矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣江掩,或者用另一種說法是這個矩陣是退化(degenerate)的,那么我們就沒有辦法使用正規(guī)方程來求出 θ 乘瓤。
幸運的是环形,正規(guī)化也為我們解決了這個問題,具體的說只要正則參數(shù)是嚴格大于零衙傀,實際上抬吟,可以證明如下矩陣:
將是可逆的。因此统抬,使用正則還可以照顧任何 XTX 不可逆的問題火本。所以,你現(xiàn)在知道如何實現(xiàn)嶺回歸聪建,利用它钙畔,你就可以避免過度擬合,即使你在一個相對較小的訓練集里有很多特征金麸。這應該可以讓你在很多問題上更好的運用線性回歸擎析。
在接下來的視頻中,我們將把這種正則化的想法應用到 Logistic 回歸挥下,這樣我們就可以讓 logistic 回歸也避免過度擬合揍魂,從而表現(xiàn)的更好桨醋。
4. Regularized Logistic Regression
Regularized Logistic Regression 實際上與 Regularized Linear Regression 是十分相似的。
同樣使用梯度下降:
如果在高級優(yōu)化算法中现斋,使用正則化技術的話喜最,那么對于這類算法我們需要自己定義costFunction。
For those methods what we needed to do was to define the function that's called the cost function.
這個我們自定義的 costFunction 的輸入為向量 θ 步责,返回值有兩項返顺,分別是代價函數(shù) jVal 以及 梯度gradient。
總之我們需要的就是這個自定義函數(shù)costFunction蔓肯,針對Octave而言遂鹊,我們可以將這個函數(shù)作為參數(shù)傳入到 fminunc 系統(tǒng)函數(shù)中(fminunc 用來求函數(shù)的最小值,@costFunction作為參數(shù)代進去蔗包,注意 @costFunction 類似于C語言中的函數(shù)指針)秉扑,fminunc返回的是函數(shù) costFunction 在無約束條件下的最小值,即我們提供的代價函數(shù) jVal 的最小值调限,當然也會返回向量 θ 的解舟陆。
上述方法顯然對正則化邏輯回歸是適用的。
5. 尾聲
通過最近的幾篇文章耻矮,我們不難發(fā)現(xiàn)秦躯,無論是線性回歸問題還是邏輯回歸問題都可以通過構造多項式來解決。但是裆装,你將逐漸發(fā)現(xiàn)其實還有更為強大的非線性分類器可以用來解決多項式回歸問題踱承。下篇文章中,我們將會討論哨免。