這一講關注另一個很重要的方法,邏輯斯蒂迴歸(logistic regression)。
林軒田對邏輯斯蒂迴歸的解釋思路和Andrew Ng 還是有明顯區別的,都十分有助於我們的理解;但要深究其數學意義,還要自己多鑽研。
1,邏輯斯蒂迴歸問題
有一組病人的數據,我們需要預測他們在一段時間後患上心臟病的“可能性”,就是我們要考慮的問題。
通過二值分類,我們僅僅能夠預測病人是否會患上心臟病,不同於此的是,現在我們還關心患病的可能性,即 f(x) = P(+1|x),取值範圍是區間 [0,1]。
然而,我們能夠獲取的訓練數據卻與二值分類完全一樣,x 是病人的基本屬性,y 是+1(患心臟病)或 -1(沒有患心臟病)。輸入數據並沒有告訴我們有關“概率” 的信息。
在二值分類中,我們通過w*x 得到一個"score" 後,通過取符號運算sign 來預測y 是+1 或 -1。而對於當前問題,我們如同能夠將這個score 映射到[0,1] 區間,問題似乎就迎刃而解了。
邏輯斯蒂迴歸選擇的映射函數是S型的sigmoid 函數。
sigmoid 函數: f(s) = 1 / (1 + exp(-s)), s 取值範圍是整個實數域, f(x) 單調遞增,0 <= f(x) <= 1。
於是,我們有:
2,邏輯斯蒂迴歸的優化方法
對於上面的公式,如何定義Ein(w) 呢?
logistic regression 的目標是 f(x) = P(+1|x):
當y = +1 時, P(y|x) = f(x);
當y = -1 時, P(y|x) = 1 - f(x).
在機器學習假設中,數據集D 是由f 產生的,我們可以按照這個思路,考慮f 和假設 h 生成訓練數據D的概率:
訓練數據的客觀存在的,顯然越有可能生成該數據集的假設越好。
通過一些列簡單轉換,我們得到最終的優化目標函數:
注意上圖中"cross-entropy error" 的定義。
3,LR Error 的梯度
Ein(w) 的微分結果是:
想要上式等於零,或者sigmoid 項恆爲0,這時要求數據時線性可分的(不能有噪音)。
否則,需要迭代優化。直觀的優化方法:
4, 梯度下降法
梯度下降法是最經典、最常見的優化方法之一。
要尋找目標函數曲線的波谷,採用貪心法:想象一個小人站在半山腰,他朝哪個方向跨一步,可以使他距離谷底更近(位置更低),就朝這個方向前進。這個方向可以通過微分得到。
選擇足夠小的一段曲線,可以將這段看做直線段,那麼有:
梯度下降的精髓:
之所以說最優的v 是與梯度相反的方向,想象一下:如果一條直線的斜率k>0,說明向右是上升的方向,應該向左走;反之,斜率k<0,向右走。
解決的方向問題,步幅也很重要。步子太小的話,速度太慢;過大的話,容易發生抖動,可能到不了谷底。
顯然,距離谷底較遠(位置較高)時,步幅大些比較好;接近谷底時,步幅小些比較好(以免跨過界)。距離谷底的遠近可以通過梯度(斜率)的數值大小間接反映,接近谷底時,坡度會減小。
因此,我們希望步幅與梯度數值大小正相關。
原式子可以改寫爲:
最後,完整的Logistic Regression Algorithm: