機器學習入門(邏輯迴歸詳解)

1.簡介

首先邏輯迴歸(Logistic Regression)是一個分類算法,它可以處理二元分類以及多元分類,是機器學習中一個非常非常常見的模型,在實際生產環境中也常常被使用,是一種經典的分類模型(不是迴歸模型)

2.模型構建

2.1 線性迴歸

爲了更容易理解LR,我先說一下線性迴歸吧,線性迴歸的主要思想就是通過歷史數據擬合出一條直線,用這條直線對新的數據進行預測。
對於一元的自變量:
y^=wx+b \widehat{y}= wx + b
模型參數爲w,b
對於每個樣本誤差爲:
εi=yiyi^ \varepsilon_i =y_i - \widehat{y_i}
最小誤差平方和(線性迴歸是連續的所以可以用模型誤差平方和定義損失函數):
minw,bΣiεi2=Σi(wxi+byi)2 {min \atop {\scriptstyle w,b}}\Sigma_i{\varepsilon_i}^2 = \Sigma_i(wx_i+b -y_i)^2
這裏取最小誤差平方和是因爲誤差有正有負,防止正負抵消影響誤差判斷
對於多元的自變量:
自變量可以看作是一個向量,則方程可記爲(i爲樣本特徵的數量,j爲樣本的數量):
f(xi,w,,b)=jwjxi+b=[xi1...xij][w1wj]+b=wixi+b f(x_i,w,,b) = \displaystyle\sum_{j}w_jx_i+b = [x_{i1} ...x_{ij}]\begin{bmatrix} w_1 \\ \vdots\\ w_j \end{bmatrix}+b=w_ix_i+b
因爲這裏的b最終會是一個常數,需要注意的是這裏的w和x的維度是相同的,故上述公式可變形爲:
f(xi,w,,b)=[xi1...xij][w1wj]+b=[xi1...xij  1][w1wjb]=wi~xi~ f(x_i,w,,b) = [x_{i1} ...x_{ij}]\begin{bmatrix} w_1 \\ \vdots\\ w_j \end{bmatrix}+b=[x_{i1} ...x_{ij} \space\space1]\begin{bmatrix} w_1 \\ \vdots\\ w_j\\ b \end{bmatrix}=\widetilde{w_i}\widetilde{x_i}
這時候整個公式就可以簡化爲
f(xi,w)=wxi f(x_i,w) = wx_i
我們只要研究參數w就可以了,我們最終的學習目標爲使平方差和最小時w的值:
minwL(w)=i(wxiyi)2 {min \atop {\scriptstyle w}}L(w) = \sum_i(wx_i-y_i)^2
根據函數的特性,要得到最小平方差和,對w求導,導數爲0的地方就是函數的最小值
dL(w)dw=[L(w)w1L(w)wi]=2ixixiTw2iyixi=2XTXw2XTY \frac{dL(w)}{dw}=\begin{bmatrix} \frac {\partial L(w)}{w_1} \\ \vdots\\ \frac {\partial L(w)}{w_i} \end{bmatrix}=2\sum_i x_i x_i^{\scriptscriptstyle T}w-2\sum_iy_i x_i=2X^TXw-2X^TY
令其等於0,得:
w=(XTX)1XTY w^*=(X^TX)^{-1}X^TY
然後利用最小二乘法(最小平方和)得到w
注:這裏有個問題,如果不是可逆矩陣,我們可以給他加個常數矩陣使他可逆
w=(XTX+λI)1XTY w^* = (X^TX+\lambda I)^{-1}X^TY
λ的值可以通過測試得到

2.2 邏輯迴歸(二元)

邏輯迴歸有個logit函數:
log(p/(1p))=wx log(p/(1-p)) =wx
下面先研究一下這個函數原理::
對於二分類問題,最終因變量y只有兩種情況,且兩種情況概率加起來等於1
eg:一個事件發生概率爲:p(y=1|x),不發生概率爲:p(y=0|x)
假定p(y=1|x)依賴於線性函數發f(x) = wx,但是wx值域在(-∞,+∞)
而兩個概率的比值卻是(0,+∞),我們對wx進行指數變換,那麼就可以得到:
p(y=1x)p(y=0x)=p(y=1x)1p(y=1x)=ewx(0,+)       (1) \frac{p(y=1|x)}{p(y=0|x)}=\frac{p(y=1|x)}{1-p(y=1|x)}=e^{wx} ∈(0,+∞) \space\space\space\space\space\space\space(1)
則可以得到:
p(y=1x)=ewx1+ewx=11+ewx       (2) p(y=1|x)=\frac{e^{wx}}{1+e^{wx}}=\frac{1}{1+e^{-wx}}\space\space\space\space\space\space\space(2)
現在我們把公式(1)兩邊同時進行取log運算,結果就是logit函數
而公式(2)就是我們下面要引出的sigmoid函數,也就是LR的模型

2.3 sigmoid函數

LR算法也可以看作是把線性函數的結果映射到了sigmod函數中
sigmoid函數公式及模型圖:
η=11+et \eta=\frac{1}{1+e^{-t}}
LR模型圖
則對於二分類問題類別概率爲:
p(y=1x)=η(t)=η(wx)p(y=1|x)=\eta(t)=\eta(wx)
           p(y=0x)=1η(t)=1η(wx)\space\space\space\space\space\space\space\space\space\space\space p(y=0|x)=1-\eta(t)=1-\eta(wx)

3.損失函數

從前文可以看到邏輯迴歸並不是連續的,所以不能用模型的誤差平方和定義損失函數,我們可以用極大似然推導邏輯迴歸的損失函數

3.1 極大似然估計

這裏我先解釋一下什麼是極大似然估計:eg.一個袋子中有20個球,只有黑白兩色,有放回的抽取十次,取出8個黑球和2個白球,計算袋子裏有白球黑球各幾個?
我們假設每次取出黑球的概率爲p,那麼白球概率就爲(1-p)
則: P=p8(1p)2P = p^8(1-p)^2
我們可以認爲是按照最大概率來抽取的樣本,對p進行求導,讓導數爲0.即可得到黑球對應的概率。極大似然估計就是這種思想

3.2 二元邏輯迴歸損失函數

根據極大似然估計思想,則假設二元邏輯迴歸的輸出只有0和1兩種,則:
p(yixi)=η(wxi)yi(1η(wxi))1yi p(y_i|x_i) = \eta(wx_i)^{y_i}(1-\eta(wx_i))^{1-y_i}
爲了方便求解,我們用負對數似然函數最小化:
L(w)=i(yilog(η(wxi))+(1yi)log(1η(wxi)))L(w)=-\sum_i(y_i*log(\eta(wx_i)) + (1-y_i)*log(1-\eta(wx_i)))
損失函數的本質是如果預測對了可以不懲罰,如果錯了,就加大懲罰,也就是讓損失函數變得較大,而-log函數在[0,1]之間正好符合這一點。另外,前面線性迴歸我們損失函數是用誤差平方和,而LR是廣義的線性迴歸,模型是sigmoid函數,如果也用誤差平方和的話,對於sigmoid求導無法保證是凸函數,在優化過程中得到的解可能是局部的最優解不是全局的,最後,取對數之後,求導更方便

3.3 損失函數優化

求導之前我們先對sigmoid函數變形一下:t=wxiet=ewxi,ewxi=1η(wxi)η(wxi)       (3.1)令t=wx_i,則:e^{-t}=e^{-wx_i},那麼e^{-wx_i}=\frac{1-\eta(wx_i)}{\eta(wx_i)}\space\space\space\space\space\space\space(3.1)
L(w)=i(yilog(η(wxi))+(1yi)log(1η(wxi)))L(w)=-\sum_i(y_i*log(\eta(wx_i)) + (1-y_i)*log(1-\eta(wx_i)))
L(w)=i(yi1η(wxi)η(wxi)+(1yi)11η(wxi)(1η(wxi)))=i(yi1η(wxi)η(wxi)+(yi1)11η(wxi)(η(wxi)))=i((yiη(wxi)+yi11η(wxi))η(wxi))=i(yiη(wxi)η(wxi)(1η(wxi))η(wxi))=i(yiη(wxi)η(wxi)(1η(wxi))(11ewxi)=i(yiη(wxi)η(wxi)(1η(wxi))(1(1ewxi)2)ewxi(xi)=i(yiη(wxi)η(wxi)(1η(wxi))(1(1ewxi)2)ewxi(xi)=i(yiη(wxi)η(wxi)(1η(wxi))(η(wxi)2)1η(wxi)η(wxi)xi=i(yiη(wxi))xi \begin{aligned} \nabla L(w) &=-\sum_i(y_i *\frac{1}{\eta(wx_i)}*\eta(wx_i)\rq+(1-y_i)*\frac{1}{1-\eta(wx_i)}*(1-\eta(wx_i))\rq)\\ &=-\sum_i(y_i *\frac{1}{\eta(wx_i)}*\eta(wx_i)\rq+(y_i-1)*\frac{1}{1-\eta(wx_i)}*(\eta(wx_i))\rq)\\ &=-\sum_i((\frac{y_i}{\eta(wx_i)}+\frac{y_i-1}{1-\eta(wx_i)})*\eta(wx_i)\rq)\\ &=-\sum_i(\frac{y_i-\eta(wx_i)}{\eta(wx_i)(1-\eta(wx_i))}*\eta(wx_i)\rq)\\ &=-\sum_i(\frac{y_i-\eta(wx_i)}{\eta(wx_i)(1-\eta(wx_i))}*(\frac{1}{1-e^{-wx_i}})\rq\\ &=-\sum_i(\frac{y_i-\eta(wx_i)}{\eta(wx_i)(1-\eta(wx_i))}*(-\frac{1}{(1-e^{-wx_i})^2})*e^{-wx_i}*(-x_i)\\ &=-\sum_i(\frac{y_i-\eta(wx_i)}{\eta(wx_i)(1-\eta(wx_i))}*(\frac{1}{(1-e^{-wx_i})^2})*e^{-wx_i}*(x_i)\\ &=-\sum_i(\frac{y_i-\eta(wx_i)}{\eta(wx_i)(1-\eta(wx_i))}*(\eta(wx_i)^2)*\frac{1-\eta(wx_i)}{\eta(wx_i)}*x_i\\ &=-\sum_i(y_i-\eta(wx_i))*x_i \end{aligned}
最終的結果就是我們所需要的梯度,一般我們採用梯度下降法找到最優解w,則w的每次迭代公式爲:
wnew=w+αL(w)w_{new} =w+\alpha \nabla L(w)
α爲梯度下降法的步長
我們在進行計算時候,會先設置個初始的w,然後當函數值變化較小時,停止

4.總結

邏輯迴歸尤其是二元邏輯迴歸是非常常見的模型,訓練速度很快,雖然使用起來沒有支持向量機(SVM)那麼佔主流,但是解決普通的分類問題是足夠了,訓練速度也比起SVM要快不少的。
邏輯迴歸的簡單實戰請參考我另一篇文章python實現邏輯迴歸二分類

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