机器学习之数学基础(四)~Lasso Regression回归, L1、L2 Regularization正则化, 回归问题中的损失函数
目錄
1. Lasso回歸
1.1 概念
1.2 正則化
1.3 Lasso回歸模型
1.4?為什么Lasso Regression可以做降維?
1.5?參數求解
(1)坐標軸下降法
(2)最小角回歸法
2. ?L1、L2正則化
2.1 ?L1、L2正則化來源推導
2.1.1 正則化理解之基于約束條件的最優化
2.1.2?正則化理解之最大后驗概率估計
2.2 ?L1、L2正則化效果分析
2.2.1?直觀理解
2.2.2 理論分析
3. 回歸問題中的損失函數
3.1?平方損失函數:MSE- L2 Loss
3.2 絕對值損失函數:MAE - L1 Loss
MAE相比MSE的優點:
MAE的不足:
那么什么時候用MSE,什么時候用MAE呢?
MSE與MAE都不能很好解決的問題:
3.3 Huber損失函數
為什么使用Huber?
1. Lasso回歸
————————————————
版權聲明:本文為CSDN博主「Foneone」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/foneone/article/details/96576990
1.1 概念
【轉載:從Lasso開始說起,https://zhuanlan.zhihu.com/p/46999826】
Lasso是Least Absolute Shrinkage and Selection Operator的簡稱,是一種采用了L1正則化(L1-regularization)的線性回歸方法,采用了L1正則會使得部分學習到的特征權值為0,從而達到稀疏化和特征選擇的目的。
【轉載:本文鏈接:回歸問題-Lasso回歸,https://blog.csdn.net/foneone/article/details/96576990】
Lasso(Least absolute shrinkage and selection operator)方法是以縮小變量集(降階)為思想的壓縮估計方法。它通過構造一個懲罰函數,可以將變量的系數進行壓縮并使某些回歸系數變為0,進而達到變量選擇的目的。
1.2 正則化
正則化(Regularizaiton)是一種防止過擬合的方法。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1 欠擬合和過擬合
從圖中可以看出,最右邊的屬于一種過擬合,過擬合的問題通常發生在變量(特征)過多的時候,這種情況下訓練出的方程總是能很好的擬合訓練數據,也就是損失函數可能非常接近于 0 或者就為 0。 但是,這樣的曲線會導致它無法泛化到新的數據樣本中。
如果解決過擬合問題?
(1)盡量減少選取變量的數量
可以人工檢查每一項變量,并以此來確定哪些變量更為重要,保留那些更為重要的特征變量。這種做法非常有效,但是其缺點是當舍棄一部分特征變量時,也舍棄了問題中的一些信息。例如,所有的特征變量對于預測房價都是有用的,實際上并不想舍棄一些信息或者說舍棄這些特征變量。
(2)正則化
在正則化中將保留所有的特征變量,但是會減小特征變量的數量級。 當有很多特征變量時,其中每一個變量都能對預測產生一點影響。假設在房價預測的例子中,可以有很多特征變量,其中每一個變量都是有用的,因此不希望把任何一個變量刪掉,這就導致了正則化概念的發生。
?
如果應用正則化去解決實際問題?
在圖1中,可以看出最右邊的是過擬合的,但是不想拋棄變量自帶的信息,因此加上懲罰項,使得足夠小。
優化目標為:
? ? ? ??------------原有的代價函數
在優化目標的基礎上,添加一些項(懲罰項),如下:
?? ???-------------------新的損失函數,新的代價函數
1000 只是隨便寫的一個表示很大的數字。現在,如果想要最小化這個函數,那么為了最小化這個新的損失函數,就要讓 和盡可能小。因為,如果在原有代價函數的基礎上加上?這一項 ,那么這個新的代價函數將變得很大,所以,當最小化這個新的代價函數時, 和盡可能小或者接近于0,就像我們忽略了這兩個值一樣。如果做到這一點(和接近于0),那么我們將得到一個近似的二次函數,并且中并沒有丟失和的信息(雖然和接近于0,但是還是存在的)
但是在真實問題中,一個預測問題可能有上百種特征,并不知道哪一些是高階多項式的項,就像不知道和是高階的項。所以,如果假設有一百個特征,并不知道如何選擇關聯度更好的參數,如何縮小參數的數目等等。 因此在正則化里,要做的事情,就是減小損失函數中所有的參數值(因為并不知道是哪一個或哪幾個是要去縮小的)。
因此,我們需要修改代價函數,變成如下形式:
其中就是正則化項;?λ稱為正則化參數,作用是控平衡擬合訓練的目標和保持參數值較小。
1.3 Lasso回歸模型
一般來說,回歸問題是一個函數擬合的過程,那么我們希望模型不要太復雜,否則很容易發生過擬合現象,所以我加入正則化項,而不同的正則化項就產生了不同的回歸方法,其中以Ridge Regression(嶺回歸)和Lasso最為經典,前者是加入了L2正則化項,后者加入的是L1正則化項。
?
Lasso回歸是在損失函數后,加L1正則化,如下所示:
???? ? ? ? ? ? ? ? ? ? ? ??
m為樣本個數,k為參數個數,其中為L1正則化。
---->?還有L2正則化:,加了這種正則化的損失函數模型為:脊(嶺)回歸(Ridge Regression)。
1.4?為什么Lasso Regression可以做降維?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2
以二維數據空間為例,說明Lasso和Ridge兩種方法的差異,左圖對應于Lasso方法,右圖對應于Ridge方法。?
如上圖所示,兩個圖是對應于兩種方法的等高線與約束域。紅色的橢圓代表的是隨著λ的變化所得到的殘差平方和,β?為橢圓的中心點,為對應普通線性模型的最小二乘估計。
左右兩個圖的區別在于約束域,即對應的藍色區域。?
等高線和約束域的切點就是目標函數的最優解,
- Ridge方法。對應的約束域是圓,其切點只會存在于圓周上,不會與坐標軸相切,則在任一維度上的取值都不為0,因此沒有稀疏;
- Lasso方法。其約束域是正方形,會存在與坐標軸的切點,使得部分維度特征權重為0,因此很容易產生稀疏的結果。?
所以,Lasso方法可以達到變量選擇的效果,將不顯著的變量系數壓縮至0,而Ridge方法雖然也對原本的系數進行了一定程度的壓縮,但是任一系數都不會壓縮至0,最終模型保留了所有的變量。
以二維空間為例,約束域在L1中,為,對應左圖藍色
約束域在L2中,為,對應左圖藍色
由圖也可以看出,Lasso的復雜程度由λ來控制,λ越大對變量較多的線性模型的懲罰力度就越大,從而最終獲得一個變量較少的模型。
1.5?參數求解
?
(1)坐標軸下降法
(2)最小角回歸法
過程(略)見原博客
?
2. ?L1、L2正則化
【轉載:深入理解L1、L2正則化 - MrLi的文章 - 知乎 https://zhuanlan.zhihu.com/p/29360425】
正則化(Regularization)是機器學習中一種常用的技術,其主要目的是控制模型復雜度,減小過擬合。--->應先看Lasso 回歸Regression
最基本的正則化方法是在原目標(代價)函數 中添加懲罰項,對復雜度高的模型進行“懲罰”。其數學表達形式為:
式中X、y?為訓練樣本和相應標簽,w為權重系數向量;J()為目標函數,即為懲罰項,可理解為模型“規模”的某種度量;參數控制正則化強弱。不同的函數對權重w的最優解有不同的偏好,因而會產生不同的正則化效果。最常用的函數有兩種,即范數和范數,相應稱之為正則化(絕對值)和正則化(平方)。此時有:
?
本文將從不同角度詳細說明 、正則化的推導、求解過程,并對范數產生稀疏性效果的本質予以解釋
2.1 ?L1、L2正則化來源推導
可從帶約束條件的優化求解和最大后驗概率兩種思路來推導、正則化,下面將予以詳細分析。
2.1.1 正則化理解之基于約束條件的最優化
對于模型權重系數 w求解是通過最小化目標函數實現的,即求解:
我們知道,模型的復雜度可用VC維來衡量。通常情況下,模型VC維與系數w的個數成線性關系:即w數量越多,VC維越大,模型越復雜。
==>VC維:[關于VC維的理解], [機器學習和數據挖掘(7):VC維]
因此,為了限制模型的復雜度,很自然的思路是減少系數w的個數,即讓w向量中一些元素為0或者說限制w中非零元素的個數。為此,我們可在原優化問題中加入一個約束條件:
范數表示向量中非零元素的個數。但由于該問題是一個NP問題,不易求解,為此我們需要稍微“放松”一下約束條件。
==>NP問題:
P:算起來很快的問題
NP:算起來不一定快,但對于任何答案我們都可以快速的驗證這個答案對不對
NP-hard:比所有的NP問題都難的問題
NP-complete:滿足兩點:
1. 是NP hard的問題
2. 是NP問題
[什么是NP完全問題 https://www.jianshu.com/p/dcb0b52f4935], [什么是NP問題,?https://blog.csdn.net/yangtrees/article/details/8107563]
為了達到近似效果,我們不嚴格要求某些權重w為0,而是要求權重w應接近于0,即盡量小。從而可用??、范數來近似范數,即:
?或?
使用??范數時,為方便后續處理,可對進行平方,此時只需調整 C?的取值即可。利用拉格朗日算子法,我們可將上述帶約束條件的最優化問題轉換為不帶約束項的優化問題,構造拉格朗日函數:
?或
其中>0??,我們假設??的最優解為 ,則對拉格朗日函數求最小化等價于:
?或
可以看出,上式與等價。
故此,我們得到對?、?正則化的第一種理解:
- ?正則化等價于在原優化目標函數中增加約束條件?
- ?正則化等價于在原優化目標函數中增加約束條件?
2.1.2?正則化理解之最大后驗概率估計
(略)
2.2 ?L1、L2正則化效果分析
2.2.1?直觀理解
2.2.2 理論分析
(略)
3. 回歸問題中的損失函數
3.1?平方損失函數:MSE- L2 Loss
? , Square
平方損失函數是光滑函數,能夠用梯度下降法進行優化。然而,預測值距離真實值越遠,平方損失的懲罰力度越大,因此,它對異常點比較敏感。為了解決該問題,可以采用絕對損失函數。
3.2 絕對值損失函數:MAE - L1 Loss
? ? , Average
MAE相比MSE的優點:
MAE相當于在做中值回歸,相比做均值回歸的MSE,MAE對異常點的魯棒性更好。(中值回歸與均值回歸的介紹詳見“補充信息”)
MAE的不足:
1. MAE在?處無法求導數。針對這種情況,平衡MSE的可導性和MAE的魯棒性,可以采用Huber損失函數(在第3部分介紹)。
2. MAE更新的梯度始終相同,那么在接近最優值處可能仍維持著較大的梯度而錯過最優值。
針對這種情況,可以使用變化的學習率,在接近最優值時降低學習率。
而MSE在這種情況下表現較好,即使使用固定的的學習率也可以有效收斂。MSE損失的梯度隨損失增大而增大,在損失趨于0時則減小,這使得在訓練結束時,MSE模型的結果往往會更精確。?
那么什么時候用MSE,什么時候用MAE呢?
MSE:如果異常點代表在商業中很重要的異常情況,并且需要被檢測出來,則應選用MSE損失函數。
MAE:相反,如果只把異常值當作受損數據,則應選用MAE損失函數。
總而言之,處理異常點時,MAE更穩定,但它的導數不連續,因此求解效率較低。MSE對異常點更敏感,但通過令其導數為0,可以得到更穩定的封閉解。?
MSE與MAE都不能很好解決的問題:
二者兼有的問題是:在某些情況下,上述兩種損失函數都不能滿足需求。例如,若數據中90%的樣本對應的目標值為150,剩下10%在0到30之間。
那么使用MAE作為損失函數的模型可能會忽視10%的異常點,而對所有樣本的預測值都為150。?這是因為模型會按中位數來預測。
而使用MSE的模型則會給出很多介于0到30的預測值,因為模型會向異常點偏移。均值回歸
上述兩種結果在許多商業場景中都是不可取的。
這些情況下應該怎么辦呢?最簡單的辦法是對目標變量進行變換。
而另一種辦法則是換一個損失函數,這就引出了下面要講的第三種損失函數,即Huber損失函數。
補充信息:
1.?中值回歸就是我們優化的目標是使目標值趨于樣本點值的中位數,直觀理解就是大于 與 小于 目標值的樣本點數盡量相等。
2.?均值回歸的目標則是使目標值趨于樣本點值的均值。
3. 為什么MSE是均值回歸,而MAE是中值回歸呢?
我在StackExchange找到一條很好的解釋。
3.3 Huber損失函數
Huber損失函數在|y - f(x)|較小時為平方損失,在?|y - f(x)| 較大時為線性損失。并且處處可導。
這里超參數δ的選擇非常重要,因為這決定了你對與異常點的定義。當殘差大于δ,應當采用L1(對較大的異常值不那么敏感)來最小化,而殘差小于超參數,則用L2來最小化。
由上圖可知,超參數δ?越大,對異常點越敏感,因為δ 越大,huber損失函數接近于MSE。
為什么使用Huber?
在離最優值較遠時,即|y - f(x)|較大時,Huber損失相當于MAE,對異常點有更好的魯棒性;
當離最優值較近時,即|y - f(x)|較小時,Huber損失相當于MSE,隨著損失的減小梯度也在逐漸減小,可以更好的逼近最優值,可以避免MAE中始終維持大梯度而錯過最優值的問題。
使用MAE訓練神經網絡最大的一個問題就是不變的大梯度,這可能導致在使用梯度下降快要結束時,錯過了最小點。
而對于MSE,梯度會隨著損失的減小而減小,使結果更加精確。
在這種情況下,Huber損失就非常有用。它會由于梯度的減小而落在最小值附近。比起MSE,它對異常點更加魯棒。因此,Huber損失結合了MSE和MAE的優點。但是,Huber損失的問題是我們可能需要不斷調整超參數delta。
?
總結
以上是生活随笔為你收集整理的机器学习之数学基础(四)~Lasso Regression回归, L1、L2 Regularization正则化, 回归问题中的损失函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医学图像~脑分类数据fMRI, voxe
- 下一篇: python programming t