【機器學習】關於“迴歸”的完全梳理01 —— 基本回歸模型、正則化(脊迴歸、LASSO、彈性網絡)

基本線性迴歸:

    Duanxx博主的關於線性迴歸的博客將基本的東西都說明白了,因爲博主邏輯有點亂,梳理一下發現,其主要講的是關於最基本的線性模型的兩個方面

    第一是從概率論的視角給出了線性迴歸的定義,即“線性迴歸模型的基本特性就是:模型是參數的線性函數”,這句話給我的震撼非常大,或者說正是因爲這句話才讓我將Duanxx博主的所有博客看了一遍。因爲一直以來我習慣性的理解都是“線性模型的  基本特徵是,模型是自變量的線性函數”,而事實上這樣的定義纔是更爲抽象和廣義的;此外,將線性模型分爲一般線性迴歸基於基函數的線性迴歸(重點提到了多項式曲線擬合(Polynomial Curve Fitting)),給出了介紹。

    第二是線性迴歸的算法,概括爲一次性使用全部數據的批處理技術(Batch techniques)和將數據視爲有序序列逐次使用的序列學習算法(Sequential learning,也叫作在線算法(on-line algorithms));而最常見的批處理算法就是OLS正規方程法,因爲它在所有數據的基礎上給出了一個簡單的數學公式,序列學習算法就是梯度下降和隨機梯度下降法。(關於梯度下降法到底是怎麼回事,這篇文章講得比較清楚)

對基本模型的正則化:脊迴歸、LASSO套索迴歸、彈性網絡

    首先就是關於正則化本身的問題,什麼是正則化,爲什麼要正則化。關於這個問題,這篇文章從過度擬合的角度切入來講正則化,而在Duanxx博主關於脊迴歸的文章中,則從多重共線性的角度來講正則化。事實上我認爲這二者雖然並不完全是一回事,但可以肯定是多重共線性的存在,往往會導致過擬合的問題,而同樣的,解決這兩種問題的思路是類似的,所以一起歸併到正則化的問題下。

    總得來講,根據正則化的思路,衍生出來的基本回歸模型的變種一共有嶺迴歸、LASSO套索、彈性網絡三種。而淺顯地來講的話,三者的區別就是正則化所用範式不同,從上面兩篇文章中也可以看出,正則化有L1和L2兩種範式,LASSO用的是L1絕對值  形式,脊迴歸則是L2,而彈性網絡則在二者之間做了一個平衡。但其實我們應該做的是更深入地去理解,這樣三種不同的數學處理,在面對實際問題時導致的結果有什麼差異。

    在Duanxx博主關於LASSO迴歸的文章以及Bin的文章中,都講到了稀疏性的問題。總的來講就是LASSO,或者說L1正則化可以產生更稀疏的解,幫我們自動地做了一個自變量的選擇,這就是LASSO的改進之處。

    而另一個問題就是,在使用了L1正則化之後,由於絕對值無法求導,LASSO是沒有直接的解析解的(脊迴歸有),因此,不得不去思考該用什麼樣的算法。而Duanxx博主關於LASSO迴歸的文章就給出了兩種常用算法,即座標軸下降法(coordinate descent)和最小角迴歸法( Least Angle Regression),這也是python的sklearn包爲LASSO模型提供的兩種算法。此外,這篇文章也談到了LASSO模型可以直接用AIC和BIC作爲模型自變量的選取標準的問題,不過本文主要是介紹迴歸模型本身,關於自變量的選取還有很多其他涉及到的東西,以後應該會專門寫一個專題出來。

    此外,對於彈性網絡,這篇文章給出了一些介紹,但顯然只是翻譯了sklearn的官方文檔,沒有任何自己的解讀和理解。實際上不妨將其當作脊迴歸和LASSO的結合,包括了L1和L2兩個正則範式。而對於兩個範式對應參數大小的選擇,可以更爲靈活地適應實際問題。

    最後,正則化應用於迴歸中,其實是一個收縮參數的過程。而在引入了正則化的思路之後,懲罰項的係數lamda就成爲了一個很重要的參數,所以必然會遇到的難題就是怎麼在碰到一個實際問題的時候,校準這個參數。在sklearn的官方文檔中給的是cross-validation的方式(插一句,這篇文章寫了CV是什麼,不過我也不好意思說它其實是純純地把An Introduction to Statistical Learning這本書翻譯了一遍而已),sklearn包給了現成的帶cv校準過程的迴歸模型,分別是:

    CV-嶺迴歸:linear_model.RidgeCV

    CV-LASSO:LassoCV and LassoLarsCV

    CV-彈性網絡:ElasticNetCV





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章