回歸問題及正則化


1.線性回歸模型及求解方法

什么是回歸?

X的行表示每個樣本,列表示每個特征。
研究X和Y之間關系的統計分析方法稱之為回歸。其中X是自變量,Y是因變量。
利用訓練數據,使用回歸模型(如線性模型)去擬合變量之間的關系。因此訓練任務就是利用數據,來學習模型中的參數 parameter(如線性模型中的斜率和截距)。

回歸和分類的區別和聯系

  • 區別:
分類:使用訓練集推斷輸入x所對應的離散 類別(如:+1,-1)。
回歸:使用訓練集推斷輸入x所對應的 輸出值,為連續實數。
  • 聯系:
利用回歸模型進行分類:可將回歸模型的輸出離散化以進行分類,即y= sign(f(x))。
利用分類模型進行回歸:也可利用分類模型的特點,輸出其連續化的數值。

線性模型

非線性模型

線性回歸

線性回歸模型中,假設自變量和因變量滿足如下形式:
問題:已知一些數據,如何求里面的未知參數,給出一個最優解。因此通常 將參數求解問題轉化為求最小誤差問題
一般采用模型預測結果與真實結果的差的平方和作為損失函數:
概率解釋(為什么采用差的平方和作為誤差函數):
求解參數(就是求解使得上式最小的參數θ)
  • 矩陣解法:scikit-learn中的 Linear Regression類使用的是矩陣解法(有時也稱為最小二乘法)。可以解出線性回歸系數θ
  • 梯度下降法:梯度下降( Gradient descent)是利用一階的梯度信息找到函數局部最優解的一種方法。

其基本思想是,要找代價函數最小值,只需要每一步都往下走,也就是每一步都可以讓誤差損失函數小一點。
對於線性回歸,參數的更新方法一般為(其中L為超參數,學習速率,即每一步走多遠)
如何求梯度?
(倒數第二步,只有k=j時才存在偏導)
先初始化一組θ,在這個θ值之上,用梯度下降法去求出下一組θ的值。當迭代到一定程度,J(θ)的值趨於穩定,此時的θ即為要求得的值。

2.多元回歸與多項式回歸

sklearn的一元線性回歸

在sklearn中,所有的估計器都帶有fit0和 predict0方法。
fit()用來擬合模型(將輸入數據輸入給模型,訓練得到參數), predict()利用擬合出來的模型對樣本進行預測。
實例:用sklearn來構建一元線性回歸預測披薩價格
1 from sklearn.linear_model import LinearRegression
2 X=[[6],[8],[10],[14],[18]]
3 y=[[7],[9],[13],[17.5],[18]]
4 model=LinearRegression()
5 model.fit(X, y)
6 print('預測12英寸披薩價格:$%.2f'%model.predict([12])[0])

輸出結果:預測12英寸披薩價格:$13.68 

線性回歸的參數

對於剛才的例子,Linear Regression類的fit()方法學習線性回歸模型y=w0+w1x
線性回歸模型學習到的參數是截距和權重系數。下圖中的直線就是匹薩直與價格的線性關系。
殘差(residual)
估計值(擬合值)與實際觀察值之間的差

多元線性回歸

from sklearn.linear_model import LinearRegression
X=[[6,2],[8,1],[10,0],[14,2],[18,0]]
y=[[7],[9],[13],[17.5],[18]]
model=LinearRegression()
model.fit(X, y)
X_test
=[[8,2],[9,0],[11,2],[16,2],[12,0]] y_test=[[11],[8.5],[15],[18],[11]] predictions=model.predict(X_test) for i, prediction in enumerate(predictions): print('Predicted:%s, Target: %s'%(prediction,y_test[i])) print('R-squared: %.2f'%model.score(X_test,y_test))

R方

可以用於評估回歸模型對現實數據擬合的程度。
計算步驟:

多項式回歸

用適當冪次的多項式來近似反應因變量與自變量之間的關系。
多項式模型:
多項式回歸的步驟:
二次回歸指多項式的最高次為2次。

3.損失函數的正則化(可以有效解決過擬合問題)

向量范數

矩陣范數

線性回歸的正則化

應對過擬合 (Overfitting)。因為在某些情況下,學習得到的模型在訓練集上也許誤差較小,但是對於測試集中之前未見樣本的預測卻未必有效。為此可以在損失函數中加入正則化項。
以線性回歸為例:
其中α是正則化參數( regularization parameter),用於控制兩個不同的目標的平衡。
  1. 第一個目標是使假設更好地擬合訓練數據。
  2. 第二個目標是要正則化處理,使得模型不要太復雜。
線性回歸正則化后的梯度更新方法:

為什么回歸要正則化?

實例:使用一個2次函數加上隨機的擾動來生成500個點,然后嘗試用1,2,100次方的多項式對該數據進行擬合。
擬合的性能:一次方:R2=0.82
                    二次方:R2=0.88
                    100次方:R2=0.89
下面從500個樣本中去掉2個,而在測試時使用所有的500個樣本。
多項式擬合結果:一次方:R2=0.85
                         二次方:R2=0.90
                         100次方:R2=0.57
結果表明,高次多項式過度擬合了訓練數據。
 
通過查看,會發現100次多項式擬合出的系數數值通常很大。因此在擬合過程中可以限制這些系數數值的大小來避免生成畸形的擬合函數。
具體做法就是在損失函數中加入正則化項,以抑制這些系數的數值。
  • 如: Lasso回歸(使用L1正則化)
  • 嶺( Ridge)回歸(使用L2正則化)
  • 彈性網( Elastic net,使用L1+12正則化)等回歸

通過嶺回歸,擬合結果為:一次方:R2=0.78

            二次方:R2=0.87

            100次方:R2=0.90

嶺回歸中正則權重的作用

alpha值越大(即越偏左),weights(即回歸權重參數)變得較小,即對權重的約束越大。
alpha值越小(即越偏右),權重系數 weights的取值表現出較大的震盪。特別是當接近最右側時,相當於沒有對權重參數進行約束。

通過交叉驗證找到最佳超參數alpha

sklearn提供了 RidgeCV,可以允許輸入一系列的 alphas,然后 sklearn通過交叉驗證得到適合的alpha。

4.邏輯回歸

線性回歸的輸出值的范圍通常是無法限定的。
邏輯回歸通過使用 logistic函數(或稱為 sigmoid函數)將其轉化為(0,1)區間的數值。
邏輯回歸可以被理解為是一個被 logistic函數歸一化后的線性回歸,也可以被視為一種廣義線性模型。

邏輯回歸應用舉例:垃圾短信分類

可以用TF-IDF來抽取短信的特征向量,然后用邏輯回歸分類:
(邏輯回歸的輸出值是連續的,而垃圾短信分類則是經典的兩類分類問題,如何解決?)
辦法:如果邏輯回歸響應變量等於或超過指定的臨界值(如0.5),預測結果就是正例,否則為反例。

邏輯回歸中的損失函數優化方法

即如何找到能使損失函數取值盡可能小的模型參數。
class sklearn、linear_model.LogisticRegression(solver='liblinear')。其中的 solver參數決定了邏輯回歸損失函數的優化方法。
Solver的常見取值包括:
  • sag:即隨機平均梯度下降,是 梯度下降法的變種,和普通梯度下降法的區別是每次迭代僅僅用一部分的樣本來計算梯度,適合於樣本數據多的情況。
  • liblinear:使用了開源的 liblinear庫實現,內部使用了 坐標軸下降法CD來迭代優化損失函數。
  • 其他取值,如 bfgs、 newton-cg等

坐標下降法

Sklearn中邏輯回歸的優化解決方案“ liblinear”使用基於 Liblinear的 coordinate descent CD(坐標下降)算法。
CD是一種非梯度優化算法。在每次迭代中,在當前點處沿一個坐標方向進行一維搜索以求得一個函數的局部極小值。在整個過程中循環使用不同的坐標方向。
如果在某次迭代中,函數得不到優化,說明一個駐點已經達到。
Tip:對於非平滑函數,CD法可能會遇到問題。即函數等高線非平滑時,算法可能在非駐點中斷執行。


免責聲明!

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



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