1. 程式人生 > >機器學習實戰-正則線性模型

機器學習實戰-正則線性模型

縮放 範數 函數 正常 還需 梯度 http 分類器 大牛

  這裏討論的問題是如何減少模型的過度擬合。一般地,對模型加上約束,也就是正則化,它的自由度越低,就越不容易過度擬合數據,比如對多項式模型來說,減低多項式模型的階數就是一種正則化。正則化是一類方法,不是具體的某種方法。

  對線性模型來說,通常通過約束模型的權重來實現正則化。對權重進行約束的方法有嶺回歸(Ridge Regression)、套索回歸(Lasso Regression)和彈性網絡(Elastic Net)。

  在線性化模型中加入正則項技術分享圖片,就是線性模型的正則化版,正則化模型不但要對數據進行擬合,還要使權重保持最小。正則項只能在訓練時添加到成本函數中,一旦訓練完成,就要使用不同的性能指標對模型進行評價。訓練和和測試時使用不同的性能指標是很常見的事,比如訓練時使用的是成本函數,測試時卻是精度/召回率指標,一個原因是測試用的性能指標要盡可能地接近終極目標。

  超參數α控制的是對模型進行正則化的程度,α等於0,就得到線性模型;α非常大則每個權重都非常接近於0,得到是一條穿過數據平均值的直線。

  嶺回歸成本函數

  技術分享圖片

  註意這裏從i= 1開始而不是i=0,因此theta 0 沒有正則化。並且,在執行嶺回歸之前必須對特征進行縮放,因為它對輸入特征的大小非常敏感,大多數正則化模型都是如此。

  也可以在計算閉式方程或梯度下降中使用正則化:

  技術分享圖片

  其中A是一個單位矩陣,當然左上角的元素為0,因為偏置項不應當被正則化。

  

  套索回歸--最小絕對收縮和選擇算子回歸

  其與嶺回歸的區別在於正則項是L1範數

  技術分享圖片

  Lasso回歸的一個重要特性是,它傾向於完全消除最不重要的特征,就是說將對應的權重設置為0.這也就是說Lasso回歸會自動執行特征選擇並輸出一個稀疏矩陣,只有很少部分的特征有非零權重。

技術分享圖片

  左圖是直接對數據lasso回歸,右圖是先對數據特征進行擴展,使用用PolynomialFeatures(degree=10),然後對數據進行縮放StandardScaler,再執行lasso回歸。從右圖可以看出虛線看起來像是二次的,卻接近直線,因為正則項使得不重要的權重為0。下圖是嶺回歸執行於經過相同處理的數據集上的結果:

           技術分享圖片

  兩幅圖的左子圖差別不大,右子圖差別最大的就是黑線段,lasso回歸的中的黑線段更接近線性,這是因為高階的權重被置為0.

  這裏還有一些問題,當時θi=0(i=1,2,…,n),Lasso成本函數是不可微的,但 是,當任意θi=0時,如果使用次梯度向量作為替代,依舊可以讓 梯度下降正常運轉

        

      技術分享圖片

  這裏不作深入討論,當實際使用碰到問題時在深入研究吧。

  

  彈性網絡

  這是嶺回歸和lasso回歸的中間地帶,結合體。這種策略在很多地方都會出現,這是一個好的想法,只要在數學理論上有了堅實的基礎,便會能夠有它自己的一席之地。

  顯而易見,它的正則項就是嶺回歸的正則項和lasso正則項的混合:

    技術分享圖片

  這裏所有的權重之和應當為1,這就是最後一項的系數的來由。

  那麽,聰明的人們應當如何選擇這三種方法呢?一般來說,有正則總比沒有正則化好,因此,應當盡量避免使用純線性回歸。嶺回歸通常是個不錯的默認選擇。但是,當你認為只用到少數的幾個特征時,應當選擇lasso,因為它將無用的特征的權重降為0.一般而言,彈性網絡優於lasso,尤其是當特征數大於實例數量或是幾個特征強相關時,lasso可能非常不穩定。

  

  美麗的免費午餐

  早期停止法    對於梯度下降這一類學習算法,有一個常用又好用的方法,就是在訓練誤差達到最小的時候停止訓練。隨著叠代的進行,模型在訓練集上的預測誤差越來越小,其在驗證集上的預測誤差也隨之下降。但是,經過一輪又一輪的訓練後,模型的驗證誤差不再下降反而上升,這是模型開始過度擬合的信號,我們應當在這時候停止訓練,這就是早期停止法。有大牛也稱之為“美麗的免費午餐”。雖然這樣做並沒有絕對的理論基礎來保證絕對正確,但它在大多數情況下還是非常實用的技巧。

             技術分享圖片

  對於隨機梯度和小批量下降來說,曲線不會這麽平滑,會有一些震蕩,所以很難知道是否已經到達最小值,此時可以在超過最小誤差之後一段時間再停止,然後回滾到驗證誤差最小的位置。

  邏輯回歸(logistic回歸)

  不要別這個名字本身騙了,它和邏輯沒啥關系。邏輯回歸在前面是被用來作為回歸預測的,現在也可以用來作為分類預測,要達到這樣的效果,只需要進行一些轉換。在邏輯回歸模型中,我們輸入特征數據,輸出的是權重與特征乘積之和(加上偏置項),現在,我們得到這個和之後,並不直接輸出,而是用以下函數進行概率估算:

        技術分享圖片

  這是向量形式,theta是權重向量,x是特征向量。這樣我們就得到了每個實例對應的一個概率值,這個概率值用來做什麽呢?假如我們認為一個實例為正類時,它對應的概率值為1,負類為0(理性情況),但既然是概率我們就應當允許有中間地帶,而不是非0即1.那麽一個正類的概率應當盡量接近1,負類的概率盡量接近0,有了這樣的想法,一些聰明人就用以下的sigmoid函數來實現這樣的想法:

          技術分享圖片

  它的圖像是這樣的:

  技術分享圖片

  邏輯函數的參數t對應的就是權重與特征乘積之和(加上偏置項),或者說就是預測輸出值。將預測值作為參數輸入邏輯函數,函數的輸出就是概率。根據上面的想法,我們定義出最終輸出結果的規則:

      技術分享圖片

  當概率小於0.5時,將實例歸為負類,否則歸為正類,但模型輸出的是1或0,1表示正類,0表示負類,所以有需求要的時候還需要轉換正類別。

  那麽,該如何訓練這個模型呢?所謂訓練模型就是該如何設置theta的值呢?合理的theta應當是使得對正類作出高概率估算,負類則相反。考慮一下單個實例的成本函數:

      技術分享圖片

  

  當p接近於0是,-log(p)非常大,也就是說如果模型將一個正類的概率估算為0時,成本函數會非常大;當p接近於1時-log(1-p)非常大,也就是說模型將負類作出高概率估算時,也會導致成本函數很大。因此,錯誤的分類會被懲罰。相反地,當正類的p接近於1時,成本接近於0,當負類的p接近於0時,成本也為0.這正是我們想要的。註意,計算模型的成本函數是,其實是和實例原始類別相聯系的,並且類比不同,成本計算不同,其實是個分段函數。基於以上單個實例的成本函數,可以得到以下整個訓練集的成本函數:

        技術分享圖片

  這裏實現的是一個分段函數的功能,當y=1時,取左側。

  壞消息是這個成本函數沒有已知的閉式方程來求解,也就是說沒有相等的標準方程與之對應。好消息是它是一個凸函數,意味著可以使用梯度下降的方法來叠代求解。偏導數為:

        技術分享圖片

  它計算每個實例的預測誤差,並簡單地乘以第j個特征,然後求平均值。有了偏導數就可以使用梯度下降了。

  決策邊界

  在決策邊界的兩側,實例被劃分為不同的類別,在這裏,決策邊界就是就是程θ0+θ1x1+θ2x2=0的點x的集合(假設有2個特征)。

  Softmax回歸

  邏輯回歸的推廣形式,可以支持多元分類,不過要註意的是它每次只能輸出一個類別。多元邏輯回歸的原理:對於每個實例x,softmax首先計算 每個類別k的分數sk:

  技術分享圖片

  這裏,每個類比都有自己的theta。得到實例在每個類別k的分數後,用softmax計算分數:計算每個分數的指數,然後除以進行歸一化處理,其含義是實例屬於類別k的概率。

  技術分享圖片

  softmax回歸分類器也是將估算概率最高的類別作為預測類別:

  技術分享圖片

  argmax()返回使得分數最大的k。

softmax是多類別但不是多輸出,因此只能用於類別互斥的場合 。

  接下來,訓練模型,定義交叉熵:

  技術分享圖片

  當第i個實例的目標類別(也就是原始類別)為k是 y才為0,否則為0.m是實例個數,k為類別數。當k=2時,也就是只有兩個類別時,這個成本函數與logistic成本函數等價(差個系數)。交叉熵對於類別k的偏導數:

      技術分享圖片

    有了偏導數就可以使用梯度下降方法來叠代訓練。

    對於softmax多類別分類器,其決策邊界都是線性的,因為有多個類別,因此在類別之間存在多個決策邊界,在所有邊界交匯處,所有類別的概率都相等,這個概率是有可能小於50%的,(當k=3時,交匯處屬於每個類別的概率都是33%),這時有別於logistic回歸分類的。

  

  

  

  

     

              

  

   

  

機器學習實戰-正則線性模型