1. 程式人生 > >邏輯回歸理解及代碼實現

邏輯回歸理解及代碼實現

repeat 謝謝 數據 了解 lock isp 容易 推導 最優

github:代碼實現之邏輯回歸
本文算法均使用python3實現


1. 什麽是邏輯回歸

??《機器學習實戰》一書中提到:

利用邏輯回歸進行分類的主要思想是:根據現有數據對分類邊界線建立回歸公式,以此進行分類(主要用於解決二分類問題)。

??由以上描述我們大概可以想到,對於使用邏輯回歸進行分類,我們首先所需要解決的就是尋找分類邊界線。那麽什麽是分類邊界線呢?

????????技術分享圖片 ?????? 技術分享圖片

??以上兩幅圖分別對應著,當分類樣本具有兩個特征值 $ x_1, x_2 $ 時,樣本可進行線性可分,以及非線性可分的情況。而分類邊界,便是圖中所示的綠色直線綠色曲線。(本文中只針對線性可分特征數為 $ n $

的情況進行介紹)
??而使用邏輯回歸進行分類,就是要找到這樣的分類邊界,使其能夠盡可能地對樣本進行正確分類,也就是能夠盡可能地將兩種樣本分隔開來。於是我們可以大膽猜測,可以構造這樣一個函數(圖一中特征數為2,分類邊界為直線,當特征數為 $ n $ 時分類邊界為“超平面”),來對樣本集進行分隔: \[ z(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2 x^{(i)}_2 + ... + \theta_n x^{(i)}_n \]
??其中 $ i=1,2,...m $ ,表示第 $ i $ 個樣本, $ n $ 表示特征數,當 $ z(x^{(i)}) > 0 $ 時,對應著樣本點位於分界線上方,可將其分為"1"類;當 $ z(x^{(i)}) < 0 $ 時 ,樣本點位於分界線下方,將其分為“0”類。
??我們很容易聯想到前面介紹過的線性回歸,該算法同樣是構造函數 $ h_\theta(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2 x^{(i)}_2 + ... + \theta_n x^{(i)}_n $ ,但與邏輯回歸不同的是,線性回歸模型輸入一個待預測樣本的特征值 $ x^{(i)}=[ x^{(i)}_1,x^{(i)}_2,...,x^{(i)}_n ]^T $ ,輸出則為預測值。而邏輯回歸作為分類算法,它的輸出是0/1。那麽如何將輸出值轉換成0/1呢?在此介紹一下 $ sigmoid $ 函數。

1.1 $ sigmoid $ 函數

?? $ sigmoid $ 函數定義如下: \[ g(z) = \frac{1}{1+e^{-z}} \]
??其函數圖像為:

技術分享圖片

??由函數圖像可以看出, $ sigmoid $ 函數可以很好地將 $ (-\infty , \infty) $ 內的數映射到 $ (0 , 1) $ 上。於是我們可以將 $ g(z)\geq0.5 $ 時分為"1"類, $ g(z)<0.5 $ 時分為"0"類。即: \[ y = \begin{cases} 1, & \text {if $g(z) \geq 0.5$ } \\ 0, & \text{otherwise} \end{cases} \]
??其中 $ y $ 表示分類結果。$ sigmoid $ 函數實際表達的是將樣本分為“1”類的概率,這將在本文的最後一部分進行詳細解釋。


2. 邏輯回歸模型函數

??在了解了分類邊界\[ z(x^{(i)}) = \theta_0 + \theta_1 x^{(i)}_1 + \theta_2 x^{(i)}_2 = \theta^T x^{(i)} \]
??其中,\[ \theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \vdots \\ \theta_n \\ \end{bmatrix} , x^{(i)} = \begin{bmatrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\x^{(i)}_n \\ \end{bmatrix} \]
??而 $ x_0^{(i)} = 1 $ 是偏置項(具體解釋見線性回歸), $ n $ 表示特征數,$ i=1,2,...,m $ 表示樣本數。
??以及 $ sigmoid $ 函數\[ g(z) = \frac{1}{1+e^{-z}} \]
??我們可以構造出邏輯回歸模型函數\[ h_\theta(x^{(i)}) = g(z) = g( \theta^T x^{(i)} ) = \frac{1}{1+e^{-\theta^T x^{i}}} \]
??使得我們可以對於新樣本 $ x^{new} = [x^{new}_1, x^{new}_2,...,x^{new}_n]^T $ 進行輸入,得到函數值 $ h_\theta(x^{new}) $,根據 $ h_\theta(x^{new}) $ 與0.5的比較來將新樣本進行分類。


3. 邏輯回歸損失函數

??回想在線性回歸中,我們是利用均方誤差來作為損失函數: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 \]
??同樣的,假設我們仍舊使用均方誤差來作為邏輯回歸損失函數,會出現什麽效果呢?將 $ g(z) = \frac{1}{1+e^{-z}} $ 帶入上式,我們會發現, $ J(\theta) $ 為一個非凸函數,也就是說該函數存在許多局部最小值點,在求解參數的過程中很容易陷入局部最小值點,而無法求得真正的最小值點。

技術分享圖片

??我們不妨換一個思路來求解這個問題。在上一節中提到:$ sigmoid $ 函數實際表達的是將樣本分為“1”類的概率,也就是說,使用 $ sigmoid $ 函數求解出來的值為類1的後驗估計 $ p(y=1|x,\theta) $ ,故我們可以得到: \[ p(y=1|x,\theta) = h_\theta(\theta^T x) \]
??則 \[ p(y=0|x,\theta) = 1- h_\theta(\theta^T x) \]
??其中 $ p(y=1|x,\theta) $ 表示樣本分類為 $ y=1 $ 的概率,而 $ p(y=0|x,\theta) $ 表示樣本分類為 $ y=0 $ 的概率。針對以上二式,我們可將其整理為: \[ p(y|x,\theta)=p(y=1|x,\theta)^y +p(y=0|x,\theta)^{(1-y)} = h_\theta(\theta^T x)^y + (1- h_\theta(\theta^T x))^{(1-y)} \]
??我們可以得到其似然函數為: \[ L(\theta) = \prod^m_{i=1} p(y^{(i)}|x^{(i)},\theta) = \prod ^m_{i=1}[ h_\theta(\theta^T x^{(i)})^{y^{(i)}} + (1- h_\theta(\theta^T x^{(i)}))^{1-y^{(i)}}] \]
??對數似然函數為: \[ \log L(\theta) = \sum_{i=1}^m [y^{(i)} \log{h_\theta(\theta^T x^{(i)})} + (1-y^{(i)}) \log{(1- h_\theta(\theta^T x^{(i)}))}] \]
??於是,我們便得到了損失函數,我們可以對求 $ \log L(\theta) $ 的最大值來求得參數 $ \theta $ 的值。為了便於計算,將損失函數做了以下改變: \[ J(\theta) = - \frac{1}{m} \sum_{i=1}^m [y^{(i)} \log{h_\theta(\theta^T x^{(i)})} + (1-y^{(i)}) \log{(1- h_\theta(\theta^T x^{(i)}))}] \]
??此時,我們只需對 $ J(\theta) $ 求最小值,便得可以得到參數 $ \theta $。


4. 優化算法

??對於以上所求得的損失函數,我們采用梯度下降的方法來求得最優參數。

3.1 梯度下降法(gradient descent)

??梯度下降法過程為:
?? repeat {
???? ?? $ \theta_j := \theta_j - \alpha \frac{\Delta J(\theta)}{\Delta \theta_j} $
?? }
其中 $ \alpha $ 為學習率(learning rate),也就是每一次的“步長”; $ \frac{\Delta J(\theta)}{\Delta \theta_j} $ 是梯度,$ j = 1,2,...,n $ 。
??接下來我們對梯度進行求解:

技術分享圖片

??其中:

技術分享圖片

??而又因為:

技術分享圖片

??則:

技術分享圖片

??因此:

技術分享圖片

??故:

技術分享圖片

??由以上我們可以得到梯度下降過程為:
?? repeat {
???? ?? $ \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} $
?? }
??其中 $ i = 1,2,...,m,表示樣本數 ; j = 1,2,..,n,表示特征數 $
??通過觀察我們可以發現,邏輯回歸梯度下降中參數的更新公式同線性回歸的一樣。


5. 利用最大似然函數推導邏輯回歸


引用及參考:
[1]《統計學方法》李航著
[2]《機器學習實戰》Peter Harrington著
[3] https://blog.csdn.net/zjuPeco/article/details/77165974
[4] https://blog.csdn.net/ligang_csdn/article/details/53838743

寫在最後:本文參考以上資料進行整合與總結,屬於原創,文章中可能出現理解不當的地方,若有所見解或異議可在下方評論,謝謝!
若需轉載請註明:https://www.cnblogs.com/lliuye/p/9129493.html

邏輯回歸理解及代碼實現