我又來發(fā)公式了。用行動推動簡書支持 MathJax。萬一你真想看這篇文章,請移步 邏輯回歸算法獲得完整地閱讀體驗(yàn)。
分類問題及其表現(xiàn)形式
為什么需要邏輯回歸算法
比如要對一個圖片進(jìn)行分類,判斷圖片里是否包含汽車。包含汽車的預(yù)測值為 1 。不包含汽車的預(yù)測值為 0 。這種分類問題的值是離散的,如果用 linear regresstion 來作為分類問題的預(yù)測函數(shù)是不合理的。因?yàn)轭A(yù)測出來的數(shù)值可能遠(yuǎn)小于 0 或遠(yuǎn)大于 1。我們需要找出一個預(yù)測函數(shù)模型,使其值的輸出在 [0, 1] 之間。然后我們選擇一個基準(zhǔn)值,比如 0.5 ,如果預(yù)測值算出來大于 0.5 就認(rèn)為其預(yù)測值為 1,反之則其預(yù)測值為 0.
邏輯回歸算法的預(yù)測函數(shù)
我們選擇 $g(z) = \frac{1}{1 + e^{-z}}$ 來作為我們的預(yù)測函數(shù)。這個函數(shù)稱為 Sigmoid Function 。它的圖形如下:
從圖中可以看出來,當(dāng) $z > 0$ 時,$g(z) > 0.5$ 。當(dāng) z 越來越大時,$g(z)$ 接無限接近于 1。當(dāng) $z < 0$ 時,$g(z) < 0.5$ 。當(dāng) z 越來越小時,$g(z)$ 接無限接近于 0。這正是我們想要的針對二元分類算法的預(yù)測函數(shù)。
結(jié)合我們的線性回歸函數(shù)的預(yù)測函數(shù) $h_\theta(x) = \theta^T x$,則我們的邏輯回歸模型的預(yù)測函數(shù)如下:
$$
h_\theta(x) = g(\theta^T x) = \frac{1}{1 + e{-\thetaT x}}
$$
解讀邏輯回歸預(yù)測函數(shù)的輸出值
$h_\theta(x)$ 表示針對輸入值 $x$ 以及參數(shù) $\theta$ 的前提條件下,$y=1$ 的概率。用概率論的公式可以寫成:
$$
h_\theta(x) = P(y=1 \vert x; \theta)
$$
上面的概率公式可以讀成:在輸入 $x$ 及參數(shù) $\theta$ 條件下 $y=1$ 的概率。由概率論的知識可以推導(dǎo)出,
$$
P(y=1 \vert x; \theta) + P(y=0 \vert x; \theta) = 1
$$
判定邊界 Decision Boundary
從邏輯回歸公式說起
邏輯回歸預(yù)測函數(shù)由下面兩個公式給出的:
$$
h_\theta(x) = g(\theta^T x)
$$
$$
g(z) = \frac{1}{1 + e^{-z}}
$$
假定 $y=1$ 的判定條件是 $h_\theta(x) \geq 0.5$,$y=0$ 的判定條件是 $h_\theta(x) < 0.5$,則我們可以推導(dǎo)出 $y=1$ 的判定條件就是 $\theta^T x \geq 0$,$y=0$ 的判定條件就是 $\theta^T x < 0$。所以,$\theta^T x = 0$ 即是我們的判定邊界。
判定邊界
假定我們有兩個變量 $x_1, x_2$,其邏輯回歸預(yù)測函數(shù)是 $h_\theta(x) = g(\theta_0 + \theta_1 x_1 + \theta_2 x_2)$。假設(shè)我們給定參數(shù)
$$
\theta = \begin{bmatrix} -3 \\ 1 \\ 1 \end{bmatrix}
$$
那么我們可以得到判定邊界 $-3 + x_1 + x_2 = 0$,即 $x_1 + x_2 = 3$,如果以 $x_1$ 為橫坐標(biāo),$x_2$ 為縱坐標(biāo),這個函數(shù)畫出來就是一個通過 (0, 3) 和 (3, 0) 兩個點(diǎn)的斜線。這條線就是我們的判定邊界。

直線左下角為 $y=0$ ,直線右上解為 $y=1$ 。橫坐標(biāo)為 $x_1$,縱坐標(biāo)為 $x_2$ 。
非線性判定邊界
如果預(yù)測函數(shù)是多項(xiàng)式 $h_\theta(x) = g(\theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_1^2 + \theta_4 x_2^2)$,且給定
$$
\theta = \begin{bmatrix} -1 \\ 0 \\ 0 \\ 1 \\ 1 \end{bmatrix}
$$
則可以得到判定邊界函數(shù)
$$
x_1^2 + x_2^2 = 1
$$
還是以 $x_1$ 為橫坐標(biāo),$x_2$ 為縱坐標(biāo),則這是一個半徑為 1 的圓。圓內(nèi)部是 $y=0$ ,圓外部是 $y=1$。

這是二階多項(xiàng)式的情況,更一般的多階多項(xiàng)式可以表達(dá)出更復(fù)雜的判定邊界。
邏輯回歸的成本函數(shù)
線性回歸的成本函數(shù)是 $J(\theta) = \frac{1}{m} \sum_{i=1}^m \frac{1}{2} \left (h_\theta(x^{(i)}) - y^{(i)} \right)^2 $,如果我們按照線性回歸的成本函數(shù)來計(jì)算邏輯回歸的成本函數(shù),那么我們最終會很可能會得到一個非凸函數(shù) (non-convex function),這樣我們就無法通過梯度下降算法算出成本函數(shù)的最低值。
為了讓成本函數(shù)是個凸函數(shù) (convex function),以便容易求出成本函數(shù)的最小值,我們定義邏輯回歸的成本函數(shù)如下:
$$
Cost(h_\theta(x), y) = \begin{cases}
-log(h_\theta(x)), & \text{if $y$ = 1} \\
-log(1 - h_\theta(x)), & \text{if $y$ = 0} \\
\end{cases}
$$
成本函數(shù)的解讀
如果 $y = 1, h_\theta(x) = 1$,那么成本為 $Cost = 0$;如果 $y = 1, h_\theta(x) \rightarrow 0$,那么成本將是無窮大 $Cost \rightarrow \infty$。
如果 $y = 0, h_\theta(x) = 0$,那么成本為 $Cost = 0$;如果 $y = 0, h_\theta(x) \rightarrow 1$,那么成本將是無窮大 $Cost \rightarrow \infty$。
邏輯回歸成本函數(shù)定義
由于 $y \in [0, 1]$ 的離散值,可以把兩個成本函數(shù)合并起來:
$$
J(\theta) = -\frac{1}{m} \left[ \sum_{i=1}^m log(h_\theta(x^{(i)})) + (1 - y^{(i)}) log(1 - h_\theta(x^{(i)})) \right]
$$
把 $y = 0, y = 1$ 兩種情況代入上式,很容易可以驗(yàn)證成本函數(shù)合并的等價性。使用梯度下降算法進(jìn)行參數(shù)迭代的公式如下:
$$
\begin{align}
\theta_j & = \theta_j - \alpha \frac\partial{\partial{\theta_j}}J(\theta) \\
& = \theta_j - \alpha \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)}
\end{align}
$$
這個公式的形式和線性回歸算法的參數(shù)迭代公式是一樣的。當(dāng)然,由于這里 $h_\theta(x) = \frac{1}{1 + e{-\thetaT x}}$,而線性回歸算法里 $h_\theta(x) = \theta^T x$。所以,兩者的形式一樣,但數(shù)值計(jì)算完全不同。
算法優(yōu)化
梯度下降算法的效率是比較低,優(yōu)化的梯度下降算法有 Conjugate Gradient, BFGS, L-BFGS 等。這些算法比較復(fù)雜,實(shí)現(xiàn)這些算法是數(shù)值計(jì)算專家的工作,一般工程人員只需要大概知道這些算法是怎么優(yōu)化的以及怎么使用這些算法即可。
octave 里提供了 fminunc 函數(shù),可以查閱文檔來學(xué)習(xí)函數(shù)用法,從而學(xué)會使用優(yōu)化過的梯度下降算法,以提高計(jì)算效率。
多元分類算法
除了二元分類算法外,還有多元分類問題,比如需要給郵件打標(biāo)簽,則可能有多個標(biāo)簽需要考慮。這個時候需要使用 one-vs-all (one-vs-rest) 的方法。即把要分類的一種類別和其他所有類別區(qū)分開來的,這樣就把多元分類問題轉(zhuǎn)化為二元分類問題,這樣就可以使用上文總結(jié)的所有二元分類問題的算法。
針對 $y = i$,求解針對 i 的預(yù)測函數(shù) $h_\theta^{(i)}(x)$。如果有 n 個類別,則需要求解 n 個預(yù)測函數(shù)。