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