深入理解:Linear Regression及其正則方法


  這是最近看到的一個平時一直忽略但深入研究后發現這里面的門道還是很多,Linear Regression及其正則方法(主要是Lasso,Ridge, Elastic Net)這一套理論的建立花了很長一段時間,是很多很多人的論文一點點堆起來的一套理論體系.如果你只停留在知道簡單的Linear Regression,Lasso, Ridge, Elastic Net的原理,沒有深入了解這套理論背后的故事,希望你能從這篇博客中有所收獲,當然博主水平有限,也只是稍微深入了一些,如果你是主要做這方面的工作,還望你找一些相關論文來深入學習.

  對於常見的Linear Regression我們剛學機器學習的時候會感覺這套理論很簡單,損失函數是一個均方誤差損失,然后用梯度下降來找最優的系數w即可.無論是數學公式的推到還是代碼實現都非常簡答.於是很多人都開始了學習下一章,.對於Lasso和Ridge也就是常用的L1正則和L2正則可能有部分人理解起來稍微麻煩一點,網上的教程也很多有的寫的也非常好.大家可以取參考一下.這里假設大家對於L1正則是為了讓一些相關度低的特征系數變為0從而達到select variable的目的,L2正則是對特征進行shrankage從而讓模型更加balance(模型中個特征的系數都很小,因此模型不會受到某幾個strong feature的影響)都有所了解,對於Elastic Net估計大家都停留在知道其是L1和L2正則的綜合,但是究竟其背后的原理估計沒人去深究.這里我來講講這套理論的發展歷史.從理論一步步建立的過程來讓大家對這幾個算法有更深入的理解,做到知其然,知其所以然.

  首先Linear Regression剛出來的時候效果很好(因為當時數據量不大,計算機性能也不好,Linear Regression已經是比較好的模型)因此被廣泛使用,但是基於均方誤差損失函數的Linear Regression有一個致命問題就會預測結果l地偏差高方差這個是均方誤差損失函數的問題同時模型的解釋性會很差,在小規模數據集上還能忍受,但是隨着時間的推移,數據量在急劇增大,面對大數據集情況下出現高方差.模型的泛化能力弱如何解決,人們為了解決這個問題提出了L2正則,我們都知道,均方誤差損失函數下對於那種噪點的loss會很大(y因為有個平方項),如果噪點恰好在strong featrue上那個loss大家可以腦補一下.為此人們想到了shrankage就是壓縮權重系數,這樣不論數據偏差多大,每個特征的貢獻都會很小,模型整體對於單個特征的依賴就會減弱,這樣模型整體的方差就不會很大,但是壓縮意味着強特征的效果弱化,自然而然使得bias有所增大,但是就像機器學習模型的經典理論trade off biase and variance一樣在這兩者中找到一個平衡就好.而壓縮權重系數的重任就交給了L2正則,這也是L2正則的特點.因此Ridge Regression理論就建立起來了.參數調好的情況下,其效過確實優於Linear Regression當然也是有前提條件的,對於特征較多,且大部分特征的影響較少的數據集上表現會非常好(Ridge只是L2正則中一個非常經典的算法,后來人們也對其進行了一系列的擴展來讓它適應其他情況比如group Ridge就是對特征分組然后壓縮等).anyway L2解決了模型的准確率的問題但是可解釋性依然沒有得到解決,而且當時的計算機算力不行,特征多了計算起來非常費時間,於是人們又開始了新算法的研究之路,這個研究的目的很明確就是來完成L2正則未完成的任務將一些特征壓縮到0,這樣模型實際用到的特征會很少可解釋性得到滿足同時計算速度也會大幅提高,當然其具體過程也是一波三折,大家可以仔細研究研究相關論文,最后提出來了L1正則,其思路是盡量把一些特征壓縮到0,這樣很顯然模型的預測biase會變大一些,但是模型的variance會降低,同時計算速度會提高很多而且最重要的是模型的解釋性能會變得很強(因為特征少了).因此在一些情況下也廣泛使用(使用條件:小到中等數量的特征中等大小影響的數據集上表現比較好).這里說點題外話,在這兩個算法提出來之前,人們進行特征選擇是用subset selection來做的,就是暴力搜索,找出K個最優特征的組合,這種方法計算起來非常慢(當時人們提出來貪心來加速找近似最優解).所以我們從這個算法的發展過程可以看出來,算法的發展一定是在解決實際問題的基礎上一步步演變的,非常有趣.

  最后就是L1和L2正則結合的elastic net了,這個算法克服了Lasso在一些場景的限制:

  (1)當P>>N(p是特征N是數據量)時Lasso最多只能選N(為什么是N需要用矩陣的知識來簡單證明一下)個個特征這顯然不是非常合理.

  (2)當某些特征的相關性非常高,也就是所謂的組變量,Lasso一般傾向於只選擇其中的一個也不關心究竟要選哪一個

  (3)對於一般N>P的情況,如果某些特征與預測值之間的相關性很高,經驗證明預測的最終性能是Lasso占主導地位相比於Ridge

  對於上述三個缺陷,人們就提出來Elastic Net.其思想還是建立在L1正則上面的,其目的是在保證Lasso的優良特性的情況下,克服其缺項.Elastic Net既能select variable同時也能shrankage.他能同時選擇相關度很高的組變量.論文上的一個比喻很形象:Elastic Net像一個可伸縮的漁網,可以網住所有的大魚.這個算法的優化也有一些門道,傳統的思路其實比較容易想到對於一個加了L1和L2正則的均方誤差損失函數,我們先固定λ2(L2正則項的系數)對所有的權重進行壓縮,完成L2正則,然后用Lasso進行壓縮,進行特征選擇.但是這種方法有一個很致命的缺陷就是很慢,相當於要進行兩次正則計算非常耗時.同時這種兩次壓縮並沒有根本減少方差同時還引入了額外的偏差所以這種方法也叫作naive Elastic Net.后來為了優化這個算法又提出了最終我們目前使用的Elastic Net,其思想也很簡單,但是很巧,就是將L2正則項同均方誤差項進行合並,這樣L2正則這一步就直接去掉相當於變成一個權重系數的縮減,因此這個新的表達式就可以近似看成一個Lasso Regression了.這樣整個算法的計算時間跟Lasso一樣,同時也避免了兩次shrankage帶來的額外偏差.當然整個算法具體實現細節需要大量的數學證明.這里就一一略過,需要深入了解的可以看看論文,寫的很詳細.

  這里我對Linear Regression及其正則的實際使用發展歷史及每個算法要解決的問題進行了一一闡述,可能有些粗糙.但是相信大家對於整個算法的發展過程有了了解后也明白什么樣的情況使用什么樣的算法,以及各個算法的局限性.下面我來做幾個簡單的實驗demo來看看上面幾個算法的效果,主要使用sklearn.

  

  這里的數據集直接使用的是sklearn自帶的boston房價數據集,其中特征較少,效果可能沒那么明顯,但整體來看還是有明顯區別,其中lr是LinearRegression模型,其訓練模型的系數差異很大,系數的大小代表個特征的權重,特征的強弱關系非常明顯.有些特征很強有些很弱.接下來是rd表示Ridge模型(我把懲罰因子alpha稍微調大了一點效果更加明顯),可以看出來相比如lr模型其系數都不同程度的進行了壓縮,如果我們把alpha繼續調大效果會更加明顯,當然我這里沒有管最終的預測結果,只是讓大家感受一下這幾個正則的效果.接着看ls表示Lasso模型相比如lr模型其及進行的shrankage同時也進行了變量選擇.因為有四個特征的系數變為了0.最后我們看Elastic Net模型相比如Lasso模型其壓縮幅度沒有那么大,因此只有三個變量被壓縮為0.這里看Elastic Net可能效果很差,但是不代表Elastic Net沒有用,使用時我們一定要搞清楚自己的數據集的特點,每種數據集主要面對的是什么問題,才能找到最合適的方法.

  通過上面的一個簡單例子我們可以感受一下各種正則壓縮的效果,當然如果純粹從性能角度來看,我們需要用大量不同數據集來測試,如果大家有興趣可以找一些數據集來測試一下各種算法的具體效果.這里對於Linear regresion及其正則方法有了一個全面的介紹,也給出了各種算法適合的條件和個算法解決的問題.實際問題中如何使用這些算法,還需要根據具體數據具體問題來分析選取.希望這篇簡短的介紹能給大家對Linear regression更深刻的認識.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM