項目地址:https://github.com/Daya-Jin/ML_for_learner/blob/master/linear_model/LinearRegression.ipynb
原博客:https://daya-jin.github.io/2018/09/23/LinearRegression/
模型概述
假定有一組數據X與Y,其中
X=⎣⎢⎢⎢⎡x(1)x(2)⋮x(m)⎦⎥⎥⎥⎤
X總共包含m條數據,而每條數據x(i)又可表示爲:
x(i)=[x1ix2i⋯xni]
Y是一組向量,具體展開爲:
Y=⎣⎢⎢⎢⎡y(1)y(2)⋮y(m)⎦⎥⎥⎥⎤
yi爲連續型數值,如果需要使用xi的值來擬合yi,最簡單的模型就是如下形式的線性模型:
y^(i)=θ0+θ1x1(i)+...+θnxn(i)=x(i)θT
當我們使用一個線性模型去擬合數據時,我們就默認假定了yi是服從線性分佈的,再引入一個隨機誤差項,可得真實數據值得表達式爲:
y(i)=f(x(i))+ϵ(i)
ϵ是一個完全隨機噪聲,與數據中的X與Y都沒有關係,也被叫做不可規約誤差(irreducible error)。我們的任務就是使用f^(x)=XθT去擬合f(x),f^(x)與f(x)之間的誤差稱爲可規約誤差(reducible error)。
再假設噪聲ϵ(i)服從正態分佈ϵ∼N(0,σ2),那麼在完美擬合的條件下,有y(i)∼N(x(i)θT,σ2):
p(yi∣x(i);θ)=2πσ1exp(−2σ2(y(i)−y^(i))2)
那麼,對於參數θ的似然函數爲:
L(θ)=i=1∏mp(y(i)∣x(i);θ)=i=1∏m2πσ1exp(−2σ2(y(i)−y^(i))2)
其對數似然函數爲:
l(θ)=lnL(θ)=i=1∑m[ln2πσ1−2σ2(y(i)−y^(i))2]=mln2πσ1−2σ21i=1∑m(y(i)−y^(i))2
最大化似然函數等價於最小化下面的式子:
J(θ)=21i=1∑m(y(i)−y^(i))2
一些前提假設
現在以二元情況爲例,再仔細看一下linear regression模型的表達式:
y^=θ0+θ1x1+θ2x2
注意,在這裏其實還有一個隱藏的前提假設,即x1與x2無關(相互獨立)。如果在某一情景下,這兩個特徵之間本來就存在着關係,如x2=f(x1)這樣的關係,那麼上述模型的表達式就不準確。那麼準確的linear regression模型表達式應爲:
y^=θ0+θ1x1+θ2x2+θ3(x1x2)=θ0+θ1x1+(θ2+θ3x1)x2
其中,x1x2稱爲交互項,代表的是一個線性關係。
可以加入已有特徵的高次項使得模型能夠捕獲非線性關係,如:
y^=θ0+θ1x1+θ2x12=θ0+θ1x1+θ2x22
這叫做polynomial regression,本質上還是一個linear regression。
一般來說會認爲各樣本之間的預測誤差ϵi與ϵj之間是沒有關聯的,但是在時序數據中,相鄰時間點的樣本誤差可能會存在聯繫。
如下圖是一幅殘差與時序的關係圖,可以看到殘差的分佈與時間並無關係,模型的殘差是隨機分佈的:
但是再看下圖,殘差與時間的關係中具有一定的模式,相鄰時間點的樣本殘差很相似,就說明殘差之間是有關係的:
在建立線性模型時,假設了真實數據中的噪聲分佈是服從正態分佈ϵ∼N(0,σ2)的,分佈的方差爲一常數σ2。但在實際中,預測值與真實值之間的誤差分佈方差不是一個常數,而是會隨着Y的增大而增大,從直觀上來說就是目標值越大則越難預測準,此時的殘差與Y的關係如下圖所示:
那麼,爲了抑制誤差項的方差,解決的方法也很簡單,想辦法抑制目標變量Y的取值範圍即可,可以通過凹函數變換,如Y或log(Y)來處理目標變量。
在真實數據集中,會因爲各種原因而引入異常數據,而異常數據又會影響模型對已有數據的擬合。那麼可以通過繪製studentized residual與Y的關係圖來判斷異常數據點。其中studentized residual的計算方式爲σϵi,該指標實際上就是用於檢測各樣本的殘差是否符合正態分佈,若某樣本的studentized residual不在[−3,3]區間內,則基本可以斷定該樣本點爲異常點。
之前的敘述都是假設模型的參數θ是由所有樣本點共同產生貢獻而得出的,並且每個樣本點對參數所作的貢獻也相差無幾。如果數據集中存在某幾個點,能夠對模型的最終參數產生很大的影響甚至是決定性影響,那麼這些樣本點就叫做槓桿支點(high leverage points)。
優化策略
梯度下降法
我們對需要優化的參數θ進行隨機初始化,然後我們使用每次向着最優解行進一小步的策略來實現多次迭代找到最優解。這裏用到的原理就是梯度的概念,目標函數對於參數的梯度實際上就是指向極值的方向,於是使用下面公式來更新參數θ:
θ:=θ−α∇θJ(θ)
均方誤差公式的求導太過簡單,這裏不再寫出。
梯隊下降法的優劣
梯度下降法的優點在於:
缺點是:
- 如果目標函數是非凸的,算法可能陷入一個局部最優解
- 每次計算梯度都必須使用整個訓練數據集,空間開銷大
梯度下降法還存在幾個變種,分別是:
- 分批梯度下降:每次計算梯度只使用一小批數據
- 隨機梯度下降:每次計算梯度只使用一條數據
這兩個變種都能適當彌補原始梯度下降法的缺陷。
實現指導
完整代碼
正規方程
線性迴歸的方程可寫爲:
Y^=XθT
損失函數爲:
MSE=i=1∑m(y(i)−x(i)θT)2=(Y−XθT)T(Y−XθT)
損失函數對參數θ求導並令其爲零,得:
XT(Y−XθT)=0XTY=XTXθ
如果XTX是非奇異矩陣,那麼最佳參數θ爲:
θ^=(XTX)−1XTY
引入先驗分佈的參數模型(正則化)
到目前爲止,上面所講述的線性模型,我們只對數據中的噪聲做了一個先驗假設ϵ∼N(0,σ2),那麼求出來的解一定是對已有數據(觀測值)的一個最優解。但是,對已有數據的最優解不一定對未知數據也是最優解,那麼還需要對隱藏的真實分佈Y=XθT中的參數θ再做一個先驗假設。
Laplace distribution
令θ∼Laplace(0,β),那麼依照前文,參數θ的似然函數爲:
L(θ)=i=1∏mp(y(i)∣x(i);θ)j=1∏mp(θj)=i=1∏m2πσ1exp(−2σ2(y(i)−y^(i))2)j=1∏m2β1exp(−β∣θj∣)=(2πσ)m1exp(−2σ21i=1∑m(y(i)−y^(i))2)⋅(2β)m1exp(−β1j=1∑m∣θj∣)
對數似然函數爲:
lnL(θ)=mln2πσ21+mln2β1−2σ21i=1∑m(y(i)−y^(i))2−β1j=1∑m∣θj∣)
最大化上式等價於最小化下式:
J(θ,λ)=21i=1∑m(y(i)−y^(i))2+λ∣∣θ∣∣1
此爲帶L1正則的線性迴歸,也稱LASSO。
Gaussian distribution
令θ∼N(0,β2),那麼依照前文,參數θ的似然函數爲:
L(θ)=i=1∏mp(y(i)∣x(i);θ)j=1∏mp(θj)=i=1∏m2πσ1exp(−2σ2(y(i)−y^(i))2)j=1∏m2πβ1exp(−2β2θj2)=(2πσ)m1exp(−2σ21i=1∑m(y(i)−y^(i))2)⋅(2πβ)m1exp(−2β21j=1∑mθj2)
對數似然函數爲:
lnL(θ)=mln2πσ21+nln2πβ21−2σ21i=1∑m(y(i)−y^(i))2−2β21j=1∑mθj2)
最大化上式等價於最小化下式:
J(θ,λ)=21i=1∑m(y(i)−y^(i))2+λ∣∣θ∣∣2
此爲帶L2正則的線性迴歸,也稱Ridge Regression。
通用正則化
考慮了L1與L2正則化後,不難推出正則化還有一種通用形式:
J(θ,λ)=21i=1∑m(y(i)−y^(i))2+λj=1∑mθjp
對於不同的p值,其邊界條件如下圖所示:
不過實踐證明,去嘗試除了(0,1,2)之外的p值並不值得,反而將p值限定在(1,2)之間能達到一個Ridge與Lasso的折中。不過還有一種方法就是同時結合Ridge與Lasso,形成一個ElasticNet正則項:
J(θ,λ)=21i=1∑m(y(i)−y^(i))2+λj=1∑m[αθj2+(1−α)∣θj∣]
下圖是一個L1.2與ElasticNet的邊界對比:
正則化的另一個好處
上面已經講過,數據中的各變量可能是有相互關係的,除了引入交互項捕捉這種關係之外,還可以做特徵選擇。對於有n個特徵的數據,可以嘗試所有可能的組合數來找到一個最佳特徵子集。不過暴力搜索的代價太高,可以以RME爲指導來做特徵選擇;另一方面,模型關於原數據集的最優解θ^在未知數據上不一定是最優解,選出一部分特徵也有助於提升模型的泛化性。
考慮選出一個特徵子集,模型可以用下式來描述:
θ^=arg mini=1∑m(y(i)−j=1∑nθjxij)2s.t.j=1∑nI(θj̸=0)≤s
其中I(x)是一個指示函數,s是事先設定好的特徵子集大小。但是上式不好計算,因爲約束條件是個非連續值,退而求其次,將約束條件轉化爲近似但便於計算的約束條件,有:
θ^θ^=arg mini=1∑m(y(i)−j=1∑nθjxij)2s.t.j=1∑n∣θj∣≤s=arg mini=1∑m(y(i)−j=1∑nθjxij)2s.t.j=1∑nθj2≤s
轉化後的約束條件是可計算的,下面詳細討論一下這幾種約束。
注意到,以上三種約束分別等同於三種範數:
j=1∑nI(θj̸=0)j=1∑n∣θj∣j=1∑nθj2=∣∣θ∣∣0=∣∣θ∣∣1=∣∣θ∣∣2
分別對應L0、L1、L2正則化,這三種正則化分別被稱作Subset、Lasso和Ridge,表達式爲:
Subset:θ^=arg min(i=1∑m(y(i)−y^(i))+λi=1∑nI(θj̸=0))Lasso:θ^=arg min(i=1∑m(y(i)−y^(i))+λi=1∑n∣θj∣)Ridge:θ^=arg min(i=1∑m(y(i)−y^(i))+λi=1∑nθj2)
其約束範圍與原問題的等值線如下圖所示:
不難發現,Lasso容易導致部分特徵的係數變爲0,而Ridge則不會,所以,Lasso對於Ridge有一個最大的優點就是會產生解釋性更強的模型。但是在預測準確率上,兩者沒有絕對的優劣。不過通常來說,當數據中只有一部分特徵跟目標值相關時,Lasso優於Ridge;當所有特徵都與目標值相關時,Ridge優於Lasso。
正則化的必要性:
- 最小二乘法雖然有高準確率、低偏差的優點,但是其方差大,通過收縮或設置某些係數爲零,增加適當的偏差來降低模型的方差,能有效提升模型的泛化性
- 通過減小或者置零某些predictor的係數,可以得到解釋性更強的模型