逻辑回归算法背后的数学
看完Andrew Ng老師的機器學習公開課后,對于邏輯回歸部分,打算寫篇學習筆記記錄總結一下,也和大家共同分享。
1
基本思能
邏輯回歸(Logistic Regression)和線性回歸(Linear Regression)的模型和原理是相似的(哈哈,給我的感覺就像是街霸游戲里的Ryu和Ken),按照我的理解,算法大致可以分為以下步驟:
(1)構造一個合適的預測函數,假設記為h函數。該函數就是我們需要找的分類函數,它用來預測輸入數據的判斷結果。這個過程非常關鍵,需要對數據有一定的了解或分析,知道或者猜測預測函數的“大概”形式(走勢),比如是線性函數還是非線性函數。(例如y=x,y=x2,y=x3…… 等形式的函數)
(2)構造一個損失函數(loss function)并合成一個代價函數(cost function)。損失函數是表示每一個樣本上,預測的輸出h與訓練數據類別(即真實值)y之間的偏差,可以是二者之間的差(h-y),也可以是(h-y)2(貌似這種常用一點,避免了可能出現負數的情況)或者是其他的形式。綜合考慮所有訓練數據的“損失”,將其求和或者求平均,就變成了代價函數,記為J(θ)函數(這里的參數θ是指預測函數里面的系數)
(3)尋找代價函數最小值并確定參數。顯然,我們希望J(θ)函數的值越小越好,因為這表示我們預測的和實際值越小了,預測函數的表現效果就越好,所以這一步需要做的是找到J(θ)函數的最小值。找函數的最小值有不同的方法,這里要提到的是梯度下降法(Gradient Descent),當然也有其他優秀的算法。
2
推導過程
1
?構造預測函數
邏輯回歸是一種分類方法,用于兩分類問題(即輸出只有兩種,表示為0和1)。根據上面步驟,需要先找到一個預測函數hθ(x),在這里,我們假設是線性邊界的情況,表示形式為:
因為邏輯回歸的輸出必須是兩個值,所以要利用Logistic函數(或稱為Sigmoid函數),把輸出控制在0到1之間,函數形式為:
它的函數圖像為:
結合這兩個函數,我們可以得到:
好了,到了這里我們已經定義了一個預測函數,應當注意,hθ(x)的輸出值的含義是:它表示結果取1的概率。
?
2
構造損失函數和代價函數
按照直觀思想,或是參照線性回歸的代價函數,我們可以寫出以下的代價函數:
這個代價函數在線性回歸里表現的很好,但是用于邏輯回歸的話,會變成參數θ的非凸函數。也就是說,假如我們把用在線性回歸那一套用在邏輯回歸上的話,那么可能會出現下面的情況:
即函數會出現多個局部最優解,這樣的函數就是非凸函數。顯然,如果我們使用梯度下降法求解的話,往往不能保證它能收斂到全局最小值(因為算法終止條件是導數為0或接近0)。相應地,我們希望代價函數可以是一個凸函數,圖像是這樣的:
這樣一來,我們一旦使用梯度下降法的時候就可以保證能收斂到全局最優解了。之所以會出現非凸函數的問題,是因為在邏輯回歸里引入了Sigmoid函數,但它作用在上面的那個J(θ)后,就會出現多個局部最小值的情況。
為了解決這個問題,在極大似然法的基礎上,人們提出了運用在邏輯回歸的損失函數是:
整合成一個式子就是:
所以最后代價函數的形式是:
為了幫助理解這個cost函數,我們使用Python的matplotlib畫一下兩種情況的相關圖像。
y=1時:
y=0時:
由此我們可以看出,無論是y=0還是y=1的情況,當我們的預測值越接近真實值時,誤差會越來越小,當離真實值越遠時,誤差便越來越大,趨于無窮。結合圖像一起看,應該不難理解這個函數了。
3
?求解代價函數最小值和參數
在這里,我們用到的是梯度下降法。我們這里只討論系數是一維的情況,主要是考慮到比較容易理解,也容易用圖像表達出來。其實,假如系數是多維的話,核心的思想也是一樣的,說白了就是求得導數(多維時就是偏導數)為0(或者設置一個閾值接近0)即可。
接下來就來具體討論一下。
首先看一下梯度下降法的模式,它的本尊長這樣:
其中θ是我們要求解的系數,α是學習步長。接下來看一下為什么可以用這一條公式來求解最小值(假設此時代價函數已經是凸函數)。
上面說過,我們只討論最簡單的一種情況,即一維系數。我們分兩種情況來看一下。
第一種情況,假設我們的θ初始值大于最優解,那么我們可以得到這樣的圖像:
?
這張圖像很好地解釋了這個公式的可行性:如果此時的θ在最優解的右邊,我們對其進行求導,顯然此刻導數為正,那么根據上面的公式,就會減小θ,使其向最優解的方向靠攏。
第二種情況,θ初始值小于最優解,那么我們可以得到這樣的圖像:
此時的θ在最優解的左邊,我們對其進行求導,顯然此刻導數為負,那么根據公式,就會增大θ,使其向最優解的方向靠攏。
當然,嚴格來講還有第三種,就是我們初始化參數的時候,可以剛剛好滿足了我們的要求,然而這個通常不大可能,運氣得多好啊,哈哈。。。
所以,這就是梯度下降法的核心思想(看到這里有沒有感覺其實也不是很難),我們接下來把它運用到邏輯回歸的代價函數里,可以得到這樣一個式子:
這就是邏輯回歸中梯度下降更新系數θ的公式了。
寫到這里已經快接近尾聲了,在梯度下降法中,還要一點點小問題,就是關于步長α的取值,需要注意的是,當α過大時,可能會不小心就錯過了最優解,因為步子邁得大了;α過小時,算法在收斂上會變慢,因為每次只前進那么一點點。所以這個貌似要看經驗,并且一般都會試一下好幾個不同的步長α來檢驗算法,避免偶然性。
對于梯度下降而言,因為每次要涉及計算到全部的樣本,一旦你的樣本數多,擬合的參數多,并且步長設置的也小了一點,那么算法會計算很久。于是現在也有其他的算法用于計算類似的問題,各位小伙伴有興趣也可以了解一下。
3
小結
這一篇介紹了邏輯回歸背后的數學原理,篇幅比較長,可能讀起來會比較久,因為大多是公式和原理,所以需要慢慢看,仔細理解。當然,里面還是省略了一些更為仔細的推導部分,主要是導數(偏導數)推導方面的,但基本不會影響到理解這個算法的數學原理。另外,可能有些地方寫得還不夠透徹,或者寫得還不夠好,又或者是有出現錯誤的地方,請大家能多多包涵,多多指教,共同學習,共同進步!
總結
以上是生活随笔為你收集整理的逻辑回归算法背后的数学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017 软件开发薪酬调查:Go 和 S
- 下一篇: 程序员快来看!经典代码替你省去多少时间?