演算法工程師修仙之路:吳恩達機器學習(四)
吳恩達機器學習筆記及作業程式碼實現中文版
第四章 Logistic迴歸
分類
-
在分類問題中,要預測的變數y是離散的值,邏輯迴歸 (Logistic Regression) 演算法是目前最流行使用最廣泛的一種學習演算法。
-
在分類問題中,我們嘗試預測的是結果是否屬於某一個類
- 正確或錯誤。
- 判斷一封電子郵件是否是垃圾郵件。
- 判斷一次金融交易是否是欺詐。
- 區別一個腫瘤是惡性的還是良性的。
-
我們將因變數(dependent variable)可能屬於的兩個類分別稱為負向類(negative class)和正向類( positive class),則因變數 y只取0或1,其中 0 表示負向類,1 表示正向類。
假設陳述
-
根據線性迴歸模型我們只能預測連續的值,然而對於分類問題,我們需要輸出 0 或 1,我們可以預測:
- 當 時,預測y=1。
- 當 時,預測y=0。
-
邏輯迴歸模型的假設是: 。
- 邏輯迴歸模型的輸出變數範圍始終在 0 和 1 之間。
- X代表特徵向量。
- g代表邏輯函式(logistic function)。
- 一個常用的邏輯函式為 S 形函式(Sigmoid function)。
- 公式為
。
import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z))
- 的作用是,對於給定的輸入變數,根據選擇的引數計算輸出變數為1的可能性(estimated probablity)即
決策界限
-
在邏輯迴歸中,我們預測:
- 當 時,預測y=1。
- 當
時,預測y=0。
-
根據S 形函式影象,我們知道:
- 當z=0時,g(z)=0.5。
- 當z>0時,g(z)>0.5。
- 當z<0時,g(z)<0.5。
-
,即:
- 當 時,預測y=1。
- 當 時,預測y=0。
-
我們可以用非常複雜的模型來適應非常複雜形狀的判定邊界。
代價函式
-
對於線性迴歸模型,我們定義的代價函式是所有模型誤差的平方和。理論上來說,我們也可以對邏輯迴歸模型沿用這個定義,但是問題在於,當我們將 帶入到這樣定義了的代價函式中時,我們得到的代價函式將是一個非凸函式( non-convexfunction)。這意味著我們的代價函式有許多區域性最小值,這將影響梯度下降演算法尋找全域性最小值。
-
我們重新定義邏輯迴歸的代價函式為:
- 。
-
這樣構建的函式的特點是:
-
當實際的y=1且 也為1時誤差為 0。
-
當y=1但 不為 1 時誤差隨著 變小而變大。
-
當實際的y=0且 也為 0 時代價為 0。
-
當y=0但 不為 0 時誤差隨著 的變大而變大。
-
代價函式 會是一個凸函式,並且沒有區域性最優值。
import numpy as np def cost(theta, X, y): theta = np.matrix(theta) X = np.matrix(X) y = np.matrix(y) first = np.multiply(-y, np.log(sigmoid(X* theta.T))) second = np.multiply((1 - y), np.log(1 - sigmoid(X* theta.T))) return np.sum(first - second) / (len(X))
-
-
在得到這樣一個代價函式以後,我們便可以用梯度下降演算法來求得能使代價函式最小的引數了。
-
邏輯迴歸的梯度下降演算法推導: