五、線性迴歸——嶺迴歸Ridge Regression

一、嶺迴歸引進的原因

當數據之間存在多重共線性(自變量高度相關)時,就需要使用嶺迴歸分析。在存在多重共線性時,儘管最小二乘法(OLS)測得的估計值不存在偏差,它們的方差也會很大,從而使得觀測值與真實值相差甚遠。嶺迴歸通過給迴歸估計值添加一個偏差值,來降低標準誤差。
上面,我們看到了線性迴歸等式。還記得嗎?它可以表示爲:

y=a+ b*x

這個等式也有一個誤差項。完整的等式是:

y=a+b*x+e (誤差項),  [誤差項是用以糾正觀測值與預測值之間預測誤差的值]
=> y=a+y= a+ b1x1+ b2x2+....+e, 針對包含多個自變量的情形。

在線性等式中,預測誤差可以劃分爲 2 個分量,一個是偏差造成的,一個是方差造成的。預測誤差可能會由這兩者或兩者中的任何一個造成。在這裏,我們將討論由方差所造成的誤差。
嶺迴歸通過收縮參數 λ(lambda)解決多重共線性問題。請看下面的等式:

9.png

在這個等式中,有兩個組成部分。第一個是最小二乘項,另一個是 β2(β-平方)和的 λ 倍,其中 β 是相關係數。λ 被添加到最小二乘項中用以縮小參數值,從而降低方差值。

要點:
• 除常數項以外,嶺迴歸的假設與最小二乘迴歸相同;
• 它收縮了相關係數的值,但沒有達到零,這表明它不具有特徵選擇功能
• 這是一個正則化方法,並且使用的是 L2 正則化。

二、 基本模型

    嶺迴歸是在前篇介紹普通最小二乘法迴歸(ordinary least squares regression)的基礎上,加入了對錶示係數的L2-norm約束。其目標函數爲:

    我們可以看到the first term 表示對迴歸表示後的誤差最小,the second term是表示係數的均方根最小化。需要之處的是,這種對係數的約束在sparse coding, dictionary learning也是經常用到的。而且經常會有不同的範數norm要求。

    常用的幾個範數介紹:(還有一個L0範數,是計算向量中非零值的個數,這個求解起來非常麻煩!!)

 

 

三、 如何調用

    介紹完了嶺迴歸的目標函數,我們跳過求解的數學過程,直接看看在scikit-learn中怎麼調用函數求解:

 

    首先介紹Ridge的函數參數表:

class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False,
                               copy_X=True, max_iter=None, tol=0.001, solver='auto')  

 

  • alpha:上面提到的兩項之間的權重;
  • fit_intercept:默認爲true,數據可以攔截,沒有中心化;
  • normalize:輸入的樣本特徵歸一化,默認false;
  • copy_X:複製或者重寫;
  • max_iter:最大迭代次數;
  • tol: 控制求解的精度;
  • solver:求解器,有auto, svd, cholesky, sparse_cg, lsqr幾種,一般我們選擇auto,一些svd,cholesky也都是稀疏表示中常用的omp求解算法中的知識,大家有時間可以去了解。
  • Ridge函數會返回一個clf類,裏面有很多的函數,一般我們用到的有:
  • clf.fit(X, y):輸入訓練樣本數據X,和對應的標記y;
  • clf.predict(X):利用學習好的線性分類器,預測標記,一般在fit之後調用;
  • clf.corf_: 輸入迴歸表示係數

 還有其他的函數介紹見官方網址。

 

from sklearn.linear_model import Ridge  
import numpy as np  
n_samples, n_features = 10, 5  
np.random.seed(0)  
y = np.random.randn(n_samples)  
X = np.random.randn(n_samples, n_features)  
clf = Ridge(alpha=1.0)  
clf.fit(X, y)   
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,  
      normalize=False, solver='auto', tol=0.001)  

上面這個例子中的數據都是random出來的。

 

其實總的來說,就是先把Ridge的參數是指一下得到clf;

然後把訓練樣本和標記先fit學習出來;

然後在調用predict預測;

 

最後附上官方的Ridge說明文檔:

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge.decision_function

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