新型机器学习算法:正则化理解
生活随笔
收集整理的這篇文章主要介紹了
新型机器学习算法:正则化理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.過擬合問題
上面是預測房價的例子,先對該數據做線性回歸,也就是左邊第一張圖。如果這么做,可以獲得擬合直線,但是,實際上這并不是一個很好的模型。我們看看這些數據,很明顯,隨著房子面積增大,住房價格的變化趨于穩定或者說越往右越平緩。因此線性回歸并沒有很好擬合訓練數據。我們把此類情況稱為欠擬合,或者叫作叫做高偏差。這兩種說法大致相似,都表示沒有很好地擬合訓練數據。高偏差這個詞是 machine learning 的研究初期傳下來的一個專業名詞,具體到這個問題,意思就是說如果用線性回歸這個算法去擬合訓練數據,那么該算法實際上會產生一個非常大的偏差或者說存在一個很強的偏見。 第二幅圖,我們在中間加入一個二次項,也就是說對于這幅數據我們用二次函數去擬合。自然,可以擬合出一條曲線,事實也證明這個擬合效果很好。
另一個極端情況是,如果在第三幅圖中對于該數據集用一個四次多項式來擬合。因此在這里我們有五個參數θ0到θ4,這樣我們同樣可以擬合一條曲線,通過我們的五個訓練樣本,我們可以得到如右圖的一條曲線。我們似乎對訓練數據做了一個很好的擬合,因為這條曲線通過了所有的訓練實例。但是,這實際上是一條很扭曲的曲線,它不停上下波動。因此,事實上我們并不認為它是一個預測房價的好模型。所以,我們把這類情況叫做過擬合(overfitting),也叫高方差(variance)。
與高偏差一樣,高方差同樣也是一個歷史上的叫法。從第一印象上來說,如果我們擬合一個高階多項式,那么這個函數能很好的擬合訓練集(能擬合幾乎所有的訓練數據),但這也就面臨函數可能太過龐大的問題,變量太多。同時如果我們沒有足夠的數據集(訓練集)去約束這個變量過多的模型,那么就會發生過擬合。
2.什么情況下會出現過擬合現象?
過度擬合的問題通常發生在變量(特征)過多的時候。這種情況下訓練出的方程總是能很好的擬合訓練數據,也就是說,我們的代價函數可能非常接近于 0 或者就為 0。但是,這樣的曲線千方百計的去擬合訓練數據,這樣會導致它無法泛化到新的數據樣本中(過擬合帶來嚴重問題就是泛化能力差),以至于無法預測新樣本價格。 在這里,術語"泛化"指的是一個假設模型能夠應用到新樣本的能力。新樣本數據是指沒有出現在訓練集中的數據。
之前,我們看到了線性回歸情況下的過擬合。類似的情況也適用于邏輯回歸。
3.如何處理過擬合現象?
過多的變量(特征),同時只有非常少的訓練數據,會導致出現過度擬合的問題。因此為了解決過度擬合,有以下兩個辦法。3.1 方法一:降維
具體而言,我們可以人工檢查每一項變量,并以此來確定哪些變量更為重要,然后,保留那些更為重要的特征變量。至于,哪些變量應該舍棄,我們以后在討論,這會涉及到模型選擇算法,這種算法是可以自動選擇采用哪些特征變量,自動舍棄不需要的變量。這類做法非常有效,但是其缺點是當你舍棄一部分特征變量時,你也舍棄了問題中的一些信息。例如,也許所有的特征變量對于預測房價都是有用的,我們實際上并不想舍棄一些信息或者說舍棄這些特征變量。3.2 方法二:正則化
正則化中我們將保留所有的特征變量,但是會減小特征變量的數量級(參數數值的大小θ(j))。這個方法非常有效,當我們有很多特征變量時,其中每一個變量都能對預測產生一點影響。正如我們在房價預測的例子中看到的那樣,我們可以有很多特征變量,其中每一個變量都是有用的,因此我們不希望把它們刪掉,這就導致了正則化概念的發生。接下來我們會討論怎樣應用正則化和什么叫做正則化均值,然后將開始討論怎樣使用正則化來使學習算法正常工作,并避免過擬合。 損失函數
在前面的介紹中,我們看到了如果用一個二次函數來擬合這些數據,那么它給了我們一個對數據很好的擬合。然而,如果我們用一個更高次的多項式去擬合,最終我們可能會得到一個曲線,它能很好地擬合訓練集,但卻并不是一個好的結果,因為它過度擬合了數據,因此,一般性并不是很好(泛化能力差)。
讓我們考慮下面的假設,我們想要加上懲罰項,從而使參數 θ3 和 θ4 足夠的小:
這里我的意思就是,上圖的式子是我們的優化目標,也就是說我們需要盡量減少代價函數的均方誤差。
對于這個函數我們對它添加一些項,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方,
1000 只是我隨便寫的某個較大的數字而已。現在,如果我們要最小化這個函數,那么為了最小化這個新的代價函數,我們要讓θ3和θ4盡可能小。因為,如果你在原有代價函數的基礎上加上 1000 乘以 θ3 這一項 ,那么這個新的代價函數將變得很大,所以,當我們最小化這個新的代價函數時, 我們將使 θ3 的值接近于 0,同樣θ4的值也接近于0,就像我們忽略了這兩個值一樣。如果我們做到這一點(θ3和θ4接近 0 ),那么我們將得到一個近似的二次函數。
因此,我們最終恰當地擬合了數據,我們所使用的正是二次函數加上一些非常小,貢獻很小項(因為這些項的 θ3、θ4非常接近于0)。顯然,這是一個更好的假設。
更一般地,這里給出了正規化背后的思路。這種思路就是,如果我們的參數值對應一個較小值的話(參數值比較小),那么往往我們會得到一個形式更簡單的假設。
在我們上面的例子中,我們懲罰的只是θ3和θ4,使這兩個值均接近于零,從而我們得到了一個更簡單的假設,實際上這個假設大抵上是一個二次函數。
但更一般地說,如果我們像懲罰θ3和θ4這樣懲罰其它參數,那么我們往往可以得到一個相對較為簡單的假設。
實際上,這些參數的值越小,通常對應于越光滑的函數,也就是更加簡單的函數。因此 就不易發生過擬合的問題。 來讓我們看看具體的例子,對于房屋價格預測我們可能有上百種特征,與剛剛所講的多項式例子不同,我們并不知道θ3和θ4是高階多項式的項。所以,如果我們有一百個特征,我們并不知道如何選擇關聯度更好的參數,如何縮小參數的數目等等。
因此在正則化里,我們要做的事情,就是把減小我們的代價函數(例子中是線性回歸的代價函數)所有的參數值,因為我們并不知道是哪一個或哪幾個要去縮小。
因此,我們需要修改代價函數,在這后面添加一項,就像我們在方括號里的這項。當我們添加一個額外的正則化項的時候,我們收縮了每個參數。
順便說一下,按照慣例,我們沒有去懲罰θ0。因此θ0的值是大的。這就是一個約定從1到n的求和,而不是從 0 到n的求和。但其實在實踐中這只會有非常小的差異,無論你是否包括這θ0這項。但是按照慣例,通常情況下我們還是只從θ1到θn進行正則化。
紫色箭頭指示的那一項就是一個正則化項,并且λ在這里我們稱做正則化參數。 λ要做的就是控制在兩個不同的目標中的平衡關系。
- 第一個目標就是我們想要訓練,使假設更好地擬合訓練數據。我們希望假設能夠很好的適應訓練集。
- 第二個目標是我們想要保持參數值較小。(通過正則化項)
而 λ 這個正則化參數需要控制的是這兩者之間的平衡,即平衡擬合訓練的目標和保持參數值較小的目標。從而來保持假設的形式相對簡單,來避免過度的擬合。
對于我們的房屋價格預測來說,我們之前所用的非常高的高階多項式來擬合,我們將會得到一個非常彎曲和復雜的曲線函數,現在我們只需要使用正則化目標的方法,那么你就可以得到一個更加合適的曲線,但這個曲線不是一個真正的二次函數(二次函數的高階平滑),而是更加的流暢和簡單的一個曲線。這樣就得到了對于這個數據更好的假設。
4.如何設置正則化參數
在正則化線性回歸中,如果正則化參數值 λ 被設定為非常大,那么將會發生什么呢?我們將會非常大地懲罰參數θ1 θ2 θ3 θ4 … 也就是說,我們最終懲罰θ1 θ2 θ3 θ4 … ?在一個非常大的程度,那么我們會使所有這些參數接近于零。
如果我們這么做,那么就是我們的假設中相當于去掉了這些項,并且使我們只是留下了一個簡單的假設,這個假設只能表明房屋價格等于θ0的值,那就是類似于擬合了一條水平直線,對于數據來說這就是一個欠擬合 (underfitting)。這種情況下這一假設它是條失敗的直線,對于訓練集來說這只是一條平滑直線,它沒有任何趨勢,它不會去趨向大部分訓練樣本的任何值。
因此,為了使正則化運作良好,我們應當注意一些方面,應該去選擇一個不錯的正則化參數λ 。當我們以后講到多重選擇時我們將討論一種方法來自動選擇正則化參數λ,為了使用正則化,接下來我們將把這些概念應用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過度擬合了。
5.正則化線性回歸
之前我們已經介紹過,回歸的代價函數如下:對于線性回歸(的求解),我們之前運用了兩種學習算法,一種基于梯度下降,一種基于正規方程
5.1 方法一:梯度下降
5.2 方法二:正則方程
現在考慮 M(即樣本量), 比 N(即特征的數量)小或等于N。
如果只有較少的樣本,導致特征數量大于樣本數量,那么矩陣XTX將是不可逆矩陣或奇異矩陣,或者說這個矩陣是退化(degenerate)的,那么我們就沒有辦法使用正規方程來求出 θ。
幸運的是,正規化也為我們解決了這個問題,具體的說只要正則參數是嚴格大于零,實際上可以證明如下矩陣:
將是可逆的。因此,使用正則還可以照顧任何 XTX 不可逆的問題。
所以,即使在一個相對較小的訓練集里有很多特征。這應該可以讓你在很多問題上更好的運用線性回歸。
6.正則化Logistic回歸
Regularized Logistic Regression 實際上與 Regularized Linear Regression 是十分相似的。如果在高級優化算法中,使用正則化技術的話,那么對于這類算法我們需要自己定義costFunction。
這個我們自定義的 costFunction 的輸入為向量θ,返回值有兩項,分別是代價函數jVal以及梯度gradient。
總之我們需要的就是這個自定義函數costFunction,針對Octave而言,我們可以將這個函數作為參數傳入到 fminunc 系統函數中(fminunc 用來求函數的最小值,將@costFunction作為參數代進去,注意 @costFunction 類似于C語言中的函數指針),fminunc返回的是函數 costFunction 在無約束條件下的最小值,即我們提供的代價函數 jVal 的最小值,當然也會返回向量 θ 的解。
上述方法顯然對正則化邏輯回歸是適用的。
總結
以上是生活随笔為你收集整理的新型机器学习算法:正则化理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【飞秋】ASP.NET 之 常用类、方法
- 下一篇: 飞鸽传书(http://www.free