這節主要介紹線性迴歸的相關知識,包括目標函數、最小二乘、L1、L2正則、梯度下降、AUC、logistic迴歸、softmax迴歸等。
迴歸主要是用來做擬合的,比如已知一部分房子的面積、幾居室及售價信息,來估計當前要售賣的房屋的大概價格等。
**
**
所謂線性迴歸,是指各屬性的參數是線性的,目標本身可能是一階,也可能是高階的。
例:已知房屋的售價和建築面積x1 、房間個數x2 有關,則可表示爲:hθ(x)=θ0+θ1x1+θ2x2 。
上述是針對只有兩個參數的情況,但參數有多個時:
hθ(x)=∑i=0nθixi=θTX
這裏
hθ(x) 即爲我們的決策函數。我們的目的是求出決策函數的各個參數
θ 。
下面是爲求出各參數
θ 的理論和實際做法。
相對於估計值,真實值爲:
y(i)=θTx(i)+ε(i)
其中誤差
ε(i) 是獨立同分布的,並且服從均值爲0、方差爲
σ2 的高斯分佈,即:
P(ε(i))=12π−−√σexp(−(ε(i))22σ2)
根據真實值和估計值之間的關係:
P(y(i)|x(i);θ)=12π−−√σexp(−(y(i)−θTx(i))22σ2)
則誤差的似然函數
L(θ)=∏i=1nP(y(i)|x(i);θ)=∏i=1n12π−−√σexp(−(y(i)−θTx(i))22σ2)
爲求最大似然,對上述求導:
l(θ)=∑i=1nlog12π−−√σexp(−(y(i)−θTx(i))22σ2)=mlog12π−−√σ−1σ2⋅12∑i=1n(y(i)−θTx(i))2
令
J(θ)=12∑i=1n(y(i)−θTx(i))2=12∑i=1n(hθ(x(i))−y(i))2
由於
l(θ) 中第一項爲常數項,爲使
l(θ) 最大,則等價於對
J(θ) 求最小,這裏
J(θ) 定義爲損失函數,是真實值和估計值差的平方和,爲使決策函數的最大似然,需要讓損失函數最小,怎樣求出
J(θ) 的最小值呢?我們進一步推導。
**
**
決策函數最大似然的最大值等價於求損失函數J(θ) 的最小值。
J(θ)=12∑i=1n(hθ(x(i))−y(i))2=12(xθ−y)T(xθ−y)=12(θTxT−yT)(xθ−y)=12(θTxTxθ−θTxTy−yTxθ+yTy)
根據機器學習(3)中如何對矩陣求偏導數,我們對
J(θ) 求偏導數:
∂J(θ)∂θ=12(2xTxθ−2xTy)=xTxθ−xTy
最小值處:
∂J(θ)∂θ=0 ,即
xTxθ−xTy =0。
xT(xθ−y)=0
若
xTx 可逆,則
θ=(xTx)−1xTy (最小二乘)。
爲防止
xTx 不可逆(也爲了防止過擬合)的情況,加入擾動項
λ (通常稱爲嶺迴歸,這裏
λ 通常是一個極小的數值):
θ=(xTx+λI)−1xTy
**
**
在線性迴歸中,爲了預防過擬合,需要對損失函數加入擾動項,常用的擾動項有兩種:L1正則(lasso迴歸)和L2正則(嶺迴歸)。
L1正則的損失函數:
J(θ)=12∑i=1n(hθ(x(i))−y(i))2+λ∑i=1n|θj|
L2正則的損失函數:
J(θ)=12∑i=1n(hθ(x(i))−y(i))2+λ∑i=1nθ2j
注:這裏的嶺迴歸雖然和最小二乘裏的一樣,但最小二乘中是用於一次性計算出所有的參數,而這裏是用於迭代過程中使用的。
另外,L1相比於L2,參數更稀疏(θ 爲0或接近0的比較多)。
**
**
上面的最小二乘是從純數學理論的角度推導的,實際應用中,X的屬性可能很多,導致xTx 很大,計算其逆變得不切實際。實際應用中,梯度下降比較受歡迎。在機器學習(1)中已經提到過偏導數的作用,偏導數是梯度下降可行的理論支持。
梯度下降法是按下面的流程進行的:
1)首先對θ 賦值,這個值可以是隨機的,也可以讓θ 是一個全零的向量。
2)更新θ 的值,使得J(θ )按梯度下降的方向進行減少,即更新後的θ 使得J(θ )更小。
對上述的損失函數,在θj 處的梯度方向爲:
∂J(θ)∂θj=∂∂θj12(hθ(x)−y)2=(hθ(x)−y)xj
下面是更新的過程,也就是
θj 會向着梯度最小的方向進行減少。
θj 表示更新之前的值,-後面的部分表示按梯度方向減少的量,
α 表示步長,也就是每次按照梯度減少的方向變化多少。
θj=θj−α⋅∂J(θ)∂θj=θj−α⋅(hθ(x)−y)xj ,其中
α 是步長。
下面的圖可以更直觀清晰:
這是一個表示參數
θ 與損失函數J(
θ )的關係圖,紅色的部分是表示J(
θ )有着比較高的取值,我們需要的是,能夠讓J(
θ )的值儘量的低。也就是深藍色的部分。
θ0 ,
θ1 表示
θ 向量的兩個維度。
在上面提到梯度下降法的第一步是給
θ 給一個初值,假設隨機給的初值是在圖上的十字點。
然後我們將
θ 按照梯度下降的方向進行調整,就會使得J(
θ )往更低的方向進行變化,如圖所示,算法的結束將是在
θ 下降到無法繼續下降爲止。
**
**
我們現實生活中的很多數據不一定都能用線性模型描述。依然是上述的房價問題,很明顯直線非但不能很好的擬合所有數據點,而且有時候誤差非常大,但是一條類似二次函數的曲線卻能擬合地很好。爲了解決非線性模型建立線性模型的問題,我們預測一個點的值時,選擇與這個點相近的點而不是所有的點做線性迴歸。基於這個思想,便產生了局部加權線性迴歸算法。在這個算法中,其他離一個點越近,權重越大,對迴歸係數的貢獻就越多。
局部加權依然使用損失函數,只不過使用的是加權的損失函數:
J(θ)=12∑i=1nω(i)(hθ(x(i))−y(i))2
這裏
ω(i) 即爲權重,比較常用的一個權重函數爲:
ω(i)=exp(−(x(i)−x)22τ2)
**
**
首先給出logistic/sigmoid函數的定義形式:
g(x)=11+e−x
爲後面使用方便,對上述g(x)求導,可以推導出其導數爲:
g′(x)=g(x)(1−g(x))
logistic的決策函數滿足上述形式,即:
hθ(x)=11+e−θTx
假定:
p(y=1|x;θ)=hθ(x);p(y=0|x;θ)=1−hθ(x)
我們可以用一個式子描述上述兩個的概率:
p(y|x;θ)=(hθ(x))y(1−hθ(x))1−y
爲求出決策函數中的參數
θ ,依然通過最大似然的方式。logistic迴歸的最大似然爲:
L(θ)=∏i=1np(y(i)|x(i);θ)=∏i=1n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
對最大似然求對數:
l(θ)=log(L(θ))=∑i=1n(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
對
l(θ) 在
θj 處求導數,則:
∂l(θ)∂θj=∑i=1n(y(i)hθ(x(i))∂hθ(x(i))∂θj+1−y(i)1−hθ(x(i))∂(1−hθ(x(i)))∂θj)=∑i=1n(y(i)hθ(x(i))−1−y(i)1−hθ(x(i)))∂hθ(x(i))∂θj
根據
g′(x)=g(x)(1−g(x)) ,上述求導進一步得到:
∂l(θ)∂θj=∑i=1n(y(i)hθ(x(i))−1−y(i)1−hθ(x(i)))hθ(x(i))(1−hθ(x(i)))∂θTx∂θj=∑i=1n(y(i)−hθ(x(i)))x(i)j
這個結果很熟悉有木有?在線性迴歸中通過損失函數最小得到的結果和上述一致,所以logistic的參數也可以通過類似的梯度下降法得到(雖然二者都是通過梯度下降法得到參數,但還是有一定區別,下面有詳細說明)。
關於logistic的損失函數:
常用的損失函數有差平方損失函數(比如線性迴歸中使用的)、差絕對值損失函數、對數損失函數或對數似然損失函數等。logistic中使用的是對數似然損失函數,即logistic的損失函數爲
−l(θ)=−∑i=1n(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
logistic的損失函數,也即交叉熵損失函數(交叉熵在下一節中有詳細介紹)。
補充:線性迴歸和邏輯迴歸都是採用梯度下降進行參數計算的,但原理並不相同。線性迴歸是通過高斯分佈用最大似然推導計算出來的;邏輯迴歸是直接根據目標函數用最大似然推導計算出來的。最優化理論可以證明通過梯度下降可以求出線性迴歸和邏輯迴歸的參數,但梯度下降只是一種求出參數的簡單有效的方式。除了梯度下降還有牛頓法,牛頓法和梯度下降法的區別在於牛頓法是二階求導,計算比較複雜並且可能二階導不存在或沒法求出,梯度下降法是一階求導,計算複雜度低,更簡單有效。