最近翻Peter Harrington的《機器學習實戰》,看到Logistic回歸那一章有點小的疑問。
作者在簡單介紹Logistic回歸的原理后,立即給出了梯度上升算法的code:從算法到代碼跳躍的幅度有點大,作者本人也說了,這里略去了一個簡單的數學推導。
那么其實這個過程在Andrew Ng的機器學習公開課里也有講到。現在回憶起來,大二看Andrew的視頻的時候心里是有這么一個疙瘩(Andrew也是跳過了一步推導)
這里就來講一下作者略去了怎樣的數學推導,以及,怎么推導。
在此之前,先回顧一下Logistic回歸。
Logistic回歸
基本原理:《實戰》這本書上是這么講的,“回歸”就是用一條直線對一堆數據點進行擬合,這個擬合過程就稱為“回歸”。利用Logistic回歸進行分類的主要思想是,根據現有數據對分類邊界線建立回歸公式,以此進行分類。
以Andrew公開課的例子說明:
圓(藍色)和叉(紅色)是兩類數據點,我們需要找到一個決策邊界將其划分開,如圖所示的邊界形式顯然是線性的形式,如圖中所描述的:
我們記為:
這里,括號里的就是決策邊界的表達式,我們找一個函數g,將表達式結果作為輸入,生成一個預測函數hθ(x).這里我們使用Sigmoid函數
從而:
然而有時候,決策邊界用一維直線無法區分,也就是這里的θ參數個數是變數,比如下面這堆數據
這是一種非線性的決策邊界。
可以看到這里,將x1,x2參數全部平方處理,找得一個圓形邊界。
公式推導
講到這里,我們可以把邊界形式做如下推廣:
邊界的最后一項是向量相乘的形式,即:
將其輸入到sigmoid函數去判斷其所屬類別,就有了我們的預測函數,記為:
根據sigmoid圖像,這個預測函數輸出值大於0.5,那么代表x(數據點)所屬類別為1,否則是0(對於二分類問題)。
但是別忘了我們的最初的目標,這里的θ向量未知。我們的目的是:
確定θ的參數值,使得我們這個決策邊界能更好地划分數據集。
這個過程,在Andrew的課程里,被略過了,他直接給出了cost函數和J(θ)函數,然后通過梯度下降求得最優的θ參數。其中,J(θ)函數是這樣的:
利用上面的公式以及梯度下降算法,我們就能求出θ的值。也就能求出最能擬合數據的決策邊界。
接下來就要講講這個公式是怎么被推導出來的。
我們先來看看現在我們已經知道什么:
1、一堆數據點+它們的類別(2類)
2、它們的概率分布hθ(x):雖然目前θ仍然是未知參數
我們的目標是求出未知參數,使得每個樣本數據點屬於它當前所標記的類別的概率最大。
於是就引出了Fisher的極大似然估計。
這里就不講極大似然估計的具體概念和公式推導了,不過還是用個例子來形象的說明極大似然估計的作用吧:
一個獵人和一個學生一起走在山路上,突然從山間跑出一只兔子,啪一聲槍響,兔子倒地而亡。問:誰最有可能殺死了兔子?
答案顯而易見:獵人。那么這里,獵人就是那個參數θ。極大似然估計的目標就是預測出待估參數,使得樣本事件發生的概率最大。
對於上述例子,用極大似然估計的思想來說明其中的幾個重要信息:
樣本事件 | 兔子被槍殺 |
待估參數 | 射死了兔子的人(記為θ:θ屬於{獵人,學生}) |
極大似然估計就是找出最有可能殺死兔子的人。
同樣,對於本實驗的一堆數據點,我們對應着看:
樣本事件 | 每個樣本數據點屬於他自己的label |
待估參數 | 決策邊界參數向量θ |
P.S.雖然樣本里的每條數據都表明了數據點本身的類別,但是使用極大似然估計的時候,你並不知道樣本本身所屬的類別,樣本數據自帶的類別標簽是你估計好壞的一個評價標准。換句話說,數據點全體就是一個樣本事件
接下來就是估計所需要的數學推導了。
對於一個連續性的分布,我們需要它的概率密度函數,在本例中,其實就是那個sigmoid函數(取值范圍0-1剛好表示的是發生概率),我們重新寫在這里:
把這兩個式子寫在一起:
可以驗證一下,當y=1或者y=0的時候,上式分別滿足上上式。對每個樣本數據點,滿足上式,所以對於群體,我們接下來繼續。
根據極大似然估計的求解步驟,取似然函數:
要求L(θ)的最大值對應的θ參數。其中m是樣本數據點的個數
連乘不容易求解,同時又容易造成下溢出。這里由於x和ln(x)單調性相同,兩邊取對數
這個就是Andrew給的那個J(θ)了,唯一的區別就是,Andrew在前面乘了一個負系數,使得這里求最大值變成了最小值,從而可以使用梯度下降算法。
不過其實用本式也可以完成任務,只是用的算法就變成梯度上升了,其實沒有區別。
結語
這里安利一下《機器學習實戰》這本書,真的蠻不錯的,實踐性很強,既入門了ML,又鍛煉了動手能力。