參考:https://blog.csdn.net/Byron309/article/details/77716127 ---- https://blog.csdn.net/xbinworld/article/details/44276389
參考:https://blog.csdn.net/bitcarmanlee/article/details/51589143
1、首先介紹線性迴歸模型(多元)原理,模型可以表示爲:
損失函數可以表示爲:
這裏的 1/2m 主要還是出於方便計算的考慮,在求解最小二乘的時並不考慮在內;
最小二乘法可得到最優解:
監督學習有2大基本策略,經驗風險最小化和結構風險最小化;
經驗風險最小化策略爲求解最優化問題,線性迴歸中的求解損失函數最小化問題即經驗風險最小化,經驗風險最小化定義:
求解最優化問題可以轉化爲:
結構化風險最小化是爲了防止過擬合現象提出的策略;結構風險最小化等價於正則化,在經驗風險上加上表示模型複雜度的正則化項,定義如下:
這裏討論的嶺迴歸和Lasso,也就是結構風險最小化的思想,在線性迴歸的基礎上,加上模型複雜度的約束。
其中幾種範數(norm)的定義如下:
嶺迴歸的損失函數表示:
觀察這條式子很容易的可以聯想到正則化項爲L2範數,也即L2範數+損失函數其實也可以稱爲嶺迴歸;
最小二乘求解參數:
Lasso的損失函數表示:
由於Lasso損失函數的導數在0點不可導,因此不能直接利用梯度下降求解;引入subgradient的概念,考慮簡單函數,即x只有1維的情況下,即簡單函數表示:
首先定義|x|在0點的梯度,即subgradient,
函數在某一點的導數可以看成函數在這一點上的切線。那麼在原點,可以在實線下方找到無數條切線,形成曲線族;我們把這些切線斜率的範圍定義爲這點的subgradient;也即|x|在0點的導數是在-1到1範圍內的任意值;
所以可以得到h(x)的導數:
在x=0的時候,按照上面的subgradient可以得到,x=0時斜率的區間在x>0和x<0之間;當-b<2a<b時,在x=0時,f'(x)能取到值0;也就是f(x)到達極值點,這也可以解釋lasso下的解會稀疏的原因:在b的取值在一定範圍內時,只要x爲0,f'(x)就恆爲0; (這句話本人不是特別理解)(先存疑),
有關subgradient的解釋:https://blog.csdn.net/lansatiankongxxc/article/details/46386341
當x拓展到多維向量時,導數方向的變化範圍更大,問題更爲複雜;常見解決方法如下:
1、貪心算法;每次先找到與目標最相關的feature,固定其他係數,優化這個feature的係數,具體求導也用到subgradient;代表算法有LARS,feature-sign search等;
2、逐一優化;每次固定其他的維度,選擇一個維度進行優化;因爲只有一個方向有變化,所以轉化爲簡單的subgradient問題,反覆迭代所有維度,達到收斂;代表算法有coordinate descent,block coordinate descent等;
Lasso和ridge的幾何意義如下圖:
紅色橢圓和藍色的區域的切點就是目標函數的最優解;可以看到,如果是圓,很容易切到圓周的任意一點,但是很難切到座標軸上。則在該緯度上取值不爲0,因此沒有係數;如果是菱形或多邊形,則很容易切到座標軸上,使部分維度特徵權重爲0,因此很容易產生稀疏的結果;