邏輯回歸是乙個分類演算法,它可以處理二元分類以及多元分類。雖然它名字裡面有「回歸」兩個字,卻不是乙個回歸演算法。那為什麼有「回歸」這個誤導性的詞呢?個人認為,雖然邏輯回歸是分類模型,但是它的原理裡面卻殘留著回歸模型的影子,本文對邏輯回歸原理做乙個總結。
從線性回歸到邏輯回歸
我們知道,線性回歸的模型是求出輸出特徵向量y和輸入樣本矩陣x之間的線性關係係數θ,滿足y=xθ。此時我們的y是連續的,所以是回歸模型。如果我們想要y是離散的話,怎麼辦呢?乙個可以想到的辦法是,我們對於這個y再做一次函式轉換,變為g(y)。如果我們令g(y)的值在某個實數區間的時候是類別a,在另乙個實數區間的時候是類別b,以此類推,就得到了乙個分類模型。如果結果的類別只有兩種,那麼就是乙個二元分類模型了。邏輯回歸的出發點就是從這來的。下面我們開始引入二元邏輯回歸。
g(z)=11+e−z
它有乙個非常好的性質,即當z趨於正無窮時,g(z)趨於1,而當z趨於負無窮時,g(z)趨於0,這非常適合於我們的分類概率模型。另外,它還有乙個很好的導數性質:
g′(z)=g(z)(1−g(z))
這個通過函式對g(z)求導很容易得到,後面我們會用到這個式子。
如果我們令g(z)中的z為:z=xθ,這樣就得到了二元邏輯回歸模型的一般形式:
hθ(x)=11+e−xθ
其中x為樣本輸入,hθ(x)為模型輸出,可以理解為某一分類的概率大小。而θ為分類模型的要求出的模型引數。對於模型輸出hθ(x),我們讓它和我們的二元樣本輸出y(假設為0和1)有這樣的對應關係,如果hθ(x)>0.5 ,即xθ>0, 則y為1。如果hθ(x)<0.5,即xθ<0, 則y為0。y=0.5是臨界情況,此時xθ=0為, 從邏輯回歸模型本身無法確定分類。
hθ(x)的值越小,而分類為0的的概率越高,反之,值越大的話分類為1的的概率越高。如果靠近臨界點,則分類準確率會下降。
此處我們也可以將模型寫成矩陣模式:
hθ(x)=11+e−xθ
其中hθ(x)為模型輸出,為 mx1的維度。x為樣本特徵矩陣,為mxn的維度。θ為分類的模型係數,為nx1的向量。
理解了二元分類回歸的模型,接著我們就要看模型的損失函式了,我們的目標是極小化損失函式來得到對應的模型係數θ。
二元邏輯回歸的損失函式
回顧下線性回歸的損失函式,由於線性回歸是連續的,所以可以使用模型誤差的的平方和來定義損失函式。但是邏輯回歸不是連續的,自然線性回歸損失函式定義的經驗就用不上了。不過我們可以用最大似然法來推導出我們的損失函式。
我們知道,按照第二節二元邏輯回歸的定義,假設我們的樣本輸出是0或者1兩類。那麼我們有:
p(y=1|x,θ)=hθ(x)
p(y=0|x,θ)=1−hθ(x)
把這兩個式子寫成乙個式子,就是:
p(y|x,θ)=hθ(x)y(1−hθ(x))1−y
其中y的取值只能是0或者1。
得到了y的概率分布函式表示式,我們就可以用似然函式最大化來求解我們需要的模型係數θ。
為了方便求解,這裡我們用對數似然函式最大化,對數似然函式取反即為我們的損失函式j(θ)。其中:
似然函式的代數表示式為:
l(θ)=∏i=1m(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
其中m為樣本的個數。
對似然函式對數化取反的表示式,即損失函式表示式為:
j(θ)=−lnl(θ)=−∑i=1m(y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))))
損失函式用矩陣法表達更加簡潔:
j(θ)=−ytloghθ(x)−(e−y)tlog(e−hθ(x))
其中e為全1向量。
二元邏輯回歸的損失函式的優化方法
對於二元邏輯回歸的損失函式極小化,有比較多的方法,最常見的有梯度下降法,座標軸下降法,等牛頓法等。這裡推導出梯度下降法中θ每次迭代的公式。由於代數法推導比較的繁瑣,我習慣於用矩陣法來做損失函式的優化過程,這裡給出矩陣法推導二元邏輯回歸梯度的過程。
對於j(θ)=−ytloghθ(x)−(e−y)tlog(e−hθ(x)),我們用j(θ)對θ向量求導可得:
∂∂θj(θ)=xt[1hθ(x)⊙hθ(x)⊙(e−hθ(x))⊙(−y)]+xt[1e−hθ(x)⊙hθ(x)⊙(e−hθ(x))⊙(e−y)]
這一步我們用到了向量求導的鏈式法則,和下面三個基礎求導公式的矩陣形式:
∂∂xlogx=1/x
∂∂zg(z)=g(z)(1−g(z))(g(z)為sigmoid函式)
∂xθ∂θ=x
對於剛才的求導公式我們進行化簡可得:
∂∂θj(θ)=xt(hθ(x)−y)
從而在梯度下降法中每一步向量θ的迭代公式如下:
θ=θ−αxt(hθ(x)−y)
其中,α為梯度下降法的步長。
實踐中,我們一般不用操心優化方法,大部分機器學習庫都內建了各種邏輯回歸的優化方法,不過了解至少一種優化方法還是有必要的。
二元邏輯回歸的正則化
邏輯回歸也會面臨過擬合問題,所以我們也要考慮正則化。常見的有l1正則化和l2正則化。
邏輯回歸的l1正則化的損失函式表示式如下,相比普通的邏輯回歸損失函式,增加了l1的範數做作為懲罰,超引數α作為懲罰係數,調節懲罰項的大小。
二元邏輯回歸的l1正則化損失函式表示式如下:
j(θ)=−yt∙loghθ(x)−(e−y)t∙log(e−hθ(x))+α||θ||1
其中||θ||1為θ的l1範數。
邏輯回歸的l1正則化損失函式的優化方法常用的有座標軸下降法和最小角回歸法。
二元邏輯回歸的l2正則化損失函式表示式如下:
j(θ)=−yt∙loghθ(x)−(e−y)t∙log(e−hθ(x))+12α||θ||22
其中||θ||2為θ的l2範數。
邏輯回歸的l2正則化損失函式的優化方法和普通的邏輯回歸類似。
二元邏輯回歸的推廣:多元邏輯回歸
前面幾節我們的邏輯回歸的模型和損失函式都侷限於二元邏輯回歸,實際上二元邏輯回歸的模型和損失函式很容易推廣到多元邏輯回歸。比如總是認為某種型別為正值,其餘為0值,這種方法為最常用的one-vs-rest,簡稱ovr.
另一種多元邏輯回歸的方法是many-vs-many(mvm),它會選擇一部分類別的樣本和另一部分類別的樣本來做邏輯回歸二分類。最常用的是one-vs-one(ovo)。ovo是mvm的特例。每次我們選擇兩類樣本來做二元邏輯回歸。
這裡只介紹多元邏輯回歸的softmax回歸的一種特例推導:
首先回顧下二元邏輯回歸。
p(y=1|x,θ)=hθ(x)=11+e−xθ=exθ1+exθ
p(y=0|x,θ)=1−hθ(x)=11+exθ
其中y只能取到0和1。則有:
lnp(y=1|x,θ)p(y=0|x,θ)=xθ
如果我們要推廣到多元邏輯回歸,則模型要稍微做下擴充套件。
我們假設是k元分類模型,即樣本輸出y的取值為1,2,。。。,k。
根據二元邏輯回歸的經驗,我們有:
lnp(y=1|x,θ)p(y=k|x,θ)=xθ1
lnp(y=2|x,θ)p(y=k|x,θ)=xθ2
lnp(y=k−1|x,θ)p(y=k|x,θ)=xθk−1
上面有k-1個方程。
加上概率之和為1的方程如下:
∑i=1kp(y=i|x,θ)=1
從而得到k個方程,裡面有k個邏輯回歸的概率分布。
解出這個k元一次方程組,得到k元邏輯回歸的概率分布如下:
p(y=k|x,θ)=exθk/1+∑t=1k−1exθt k = 1,2,…k-1
p(y=k|x,θ)=1/1+∑t=1k−1exθt
多元邏輯回歸的損失函式推導以及優化方法和二元邏輯回歸類似,這裡就不累述。
7.小結
邏輯回歸尤其是二元邏輯回歸是非常常見的模型,訓練速度很快,雖然使用起來沒有支援向量機(svm)那麼佔主流,但是解決普通的分類問題是足夠了,訓練速度也比起svm要快不少。如果你要理解機器學習分類演算法,那麼第乙個應該學習的分類演算法個人覺得應該是邏輯回歸。理解了邏輯回歸,其他的分類演算法再學習起來應該沒有那麼難了。
【**劉建平】
Task 1 機器學習打卡 邏輯回歸
阿里天池訓練營第一次學習,關於邏輯回歸的一些看法。從sklearn中匯入邏輯回歸模型 from sklearn.linear model import logisticregression注 查得sklearn 版本0.21.3 的linear model資料夾下面已經沒有randomized l1...
菜鳥學習TASK1
鴿子部第一次task當然不能鴿掉,但是進度很迷,所以打算先對照task把概要大概寫下,然後把發展方案寫下,然後再一點點完善細節。task 了解c語言的幾大資料型別 包括陣列與字串 了解ascii碼和char型別的關係,有興趣的可以進一步了解unicode。基礎資料型別 整型 短整型short,整型i...
陣列學習task1
1.利用動態陣列解決資料存放問題 編寫一段 要求輸入乙個整數n,用動態陣列a來存放2 n之間所有5或7的倍數,輸出該陣列。托普利茨矩陣問題 如果乙個矩陣的每一方向由左上到右下的對角線上具有相同元素,那麼這個矩陣是托普利茨矩陣。給定乙個m x n的矩陣,當且僅當它是托普利茨矩陣時返回true。def ...