迴歸,我第一次看到迴歸的時候,想的就是迴歸是什麼意思?後來看了一個答案解釋很有意思,迴歸這個詞來自於生物學,在調查父母與子代身高問題的時候,發現父母如果過高的話,子女就會比父母矮一點,如果父母矮的話,子女又會比父母高,這使得身高不會向高矮倆個極端發展,而是趨於回到中心,後來做統計的時候引入統計學,迴歸就是資料會向平均值靠攏,更確切地說,資料的分佈遵循著某種規律,資料都會向這個規律靠近,就好比我們做事都有一個原則,我們每做一件事的時候,都會想想這個原則,做出的事儘量不會偏離這個原則。而我們要做的就是找出這些資料的規律,並用數學表示出這個規律。
引言
迴歸具體表現在資料中會是什麼樣的呢?我們來看分類的資料都是什麼樣,分類資料的類別必然是離散的,因為分類本質上就是找出決策邊界,這個邊界可能是線性的(這個邊界是個直線),也有可能是非線性的(這個邊界是彎彎曲曲的),有邊界的前提就是類別一定是有限的,比如測身高,有監督(分類)模型可以找出決策邊界告訴我們這個人是高還是矮,但是它一定得不到這個人的具體身高是多少,具體身高是一個連續值,不再被邊界所束縛了,但是之前也說過身高不會隨便亂髮展,它也遵循著一種規律,那麼找出迴歸規律,對身高規律進行建模,之後計算就能得到身高,這就是迴歸問題了。
簡單來說的話,迴歸資料的類別都是連續的,分類資料的類別都是離散的。
我們可以用迴歸模型來得到具體身高,在現代很高女生認為180以上就是高,以下就是矮,我們就可以使用得到的具體身高來按照這個標準判斷這個人是高還是矮,那麼也就是說給一個閾值的話,就可以將回歸應用到分類中。
那麼現在的問題就是怎樣找出這個規律?在生活中,規律是說大部分人的行為是符合一種特定的行為,那麼我們只要讓大部分資料符合我們建立的模型就行,但是我們知道資料不可能百分之一百符合,只能說是一種擬合,擬合就會有誤差,很自然就可以想到當所有資料誤差最小時的模型就是我們想要的模型,這也是一種權衡,選擇出距離所有的點之和最短的那條線。那麼問題就變成了模型如何表示?用數學上的線性和非線性函式來建立,而其中線性迴歸就是用線性函式來解決迴歸問題。
線性迴歸
線性函式來解決迴歸問題,說白了就是用一條直線來擬合所有資料,並且使整體擬合誤差最小。圖1就是一個線性迴歸圖示,用整體誤差最小的直線作為迴歸方程,而這種選擇出距離所有的點之和最短的那條線也被稱為最小二乘法。
圖1. 線性迴歸圖
最小二乘法推導
數學推導過程
我們先用數學來表示出整體誤差,我們用向量來表示資料,預設的向量都是列向量,假設
\[X = (x_1, x_2, \dots, x_n)^T =
\begin{bmatrix}
x_{11} & x_{12} & \dots & x_{1p} \\
x_{21} & x_{22} & \dots & x_{2p} \\
\vdots & \vdots & \ddots & \vdots \\
x_{n1} & x_{n2} & \dots & x_{np} \\
\end{bmatrix} _{n\times p}
\]
資料集\(X\)是\(n\times p\)維矩陣,相當於有\(n\)條資料,每條資料有\(p\)維,其中的\(Y\)是\(n\)維列向量,矩陣形式就是
\[Y =
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_{n} \\
\end{bmatrix} _{n\times 1}
\]
直線就會有線段的斜率\(W\)和偏置\(b\),線性函式初始化為\(Y = W^TX + b\),其中偏置\(b\)可以合併到斜率\(W\)中,將函式變成\(Y = W^TX + W_0X_0\),其中\(W_0 = b,X_0 = 1\),這樣線性函式就可以合併成\(Y = W^TX\),計算還是正常計算,只是要心裡有數,知道這裡的偏置怎麼合併進去的。現在可以寫出整體擬合誤差
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2
\]
可以將之進行分解
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2 =
\begin{bmatrix}
W^Tx_1 - y_1 & W^Tx_2 - y_2 & \dots & W^Tx_n - y_n\\
\end{bmatrix}
\begin{bmatrix}
W^Tx_1 - y_1 \\
W^Tx_2 - y_2 \\
\vdots \\
W^Tx_n - y_n \\
\end{bmatrix}
\]
之後我們來看其中的
\[\begin{bmatrix}W^Tx_1 - y_1 & W^Tx_2 - y_2 & \dots & W^Tx_n - y_n\\\end{bmatrix}
\]
可以將之分解開變成
\[\begin{bmatrix}
W^Tx_1 - y_1 & W^Tx_2 - y_2 & \dots & W^Tx_n - y_n\\
\end{bmatrix}=W^T(x_1, x_2, \dots, x_n) - (y_1, y_2, \dots, y_n) = W^TX^T-Y^T
\]
那麼
\[\begin{bmatrix}
W^Tx_1 - y_1 \\
W^Tx_2 - y_2 \\
\vdots \\
W^Tx_n - y_n \\
\end{bmatrix} = (W^TX^T-Y^T)^T = XW - Y
\]
將上面的式子帶入\(L(W)\)得到
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2 = (W^TX^T-Y^T)(XW - Y) = W^TX^TXW - W^TX^TY - Y^TXW + Y^TY
\]
我們來看\(W^TX^TY\),其中的\(W^T\)是\(1\times p\),\(X^T\)是\(p\times n\),\(Y\)是\(n\times 1\),所以\(W^TX^TY\)就是一個標量,那麼它的轉置\(Y^TXW\)也是標量,並且\(W^TX^TY\)和\(Y^TXW\)相同,所以可以轉化成
\[L(W) = W^TX^TXW - W^TX^TY - Y^TXW + Y^TY = W^TX^TXW - 2W^TX^TY + Y^TY
\]
我們想要線性函式等於\(Y = W^TX\)的時候,整體擬合誤差\(L(W)\)最小,換句話說,就是整體擬合誤差\(L(W)\)最小的時候,求出\(W^T\)的值。那麼對整體擬合誤差\(L(W)\)進行求導
\[\frac{\partial L(W)}{\partial W} = \frac{\partial W^TX^TXW}{\partial W} - \frac{\partial 2W^TX^TY}{\partial W}
\]
我們來看\(\frac{\partial W^TX^TXW}{\partial W}\),分子\(W^TX^TXW\)是一個標量,分母\(W\)是一個向量,這裡面是矩陣求導,具體的話,就是標量對向量求導,後面的\(\frac{\partial 2W^TX^TY}{\partial W}\)還是標量對向量求導,這方面其實是有具體的公式的
\[\frac{\partial A^TX}{\partial X} = \frac{\partial X^TA}{\partial X} = A \\
\frac{\partial X^TAX}{\partial X} = (A + A^T)X
\]
下面我們也會將矩陣求導公式的推導過程,這裡先直接用,
\[\frac{\partial L(W)}{\partial W} = \frac{\partial W^TX^TXW}{\partial W} - \frac{\partial 2W^TX^TY}{\partial W} = 2X^TXW - 2X^TY
\]
要求的是極值,那麼將導數為0,得到\(2X^TXW - 2X^TY = 0\),那麼進行轉化得到\(W\)的求解公式
\[2X^TXW = 2X^TY \\
W = (X^TX)^{-1}X^TY
\]
其中\((X^TX)^{-1}X^T\)在數學中也被稱為偽逆,自此,推導過程全部結束。
一看到矩陣的逆,我就擔心程式無法求解和計算量過大,先看程式無法求解,因為這個世界上存在不可逆矩陣,當樣本不多或者維度非常大的時候,就無法滿足\(N >> P\)條件,這時\(X^TX\)就不可逆,就有人引入了正則化項,並且將加入正則化項\(L_2\)稱為嶺迴歸,將加入正則化項\(L1\)稱為LASSO迴歸,由於篇幅限制,這裡只介紹一下嶺迴歸。順便提一下,正則化項\(L1\)是\(P(W) = ||W||\)。
即便加入正則化使它變成可逆矩陣了,但是這個矩陣的計算量肯定很大,研究中訓練資料一般很多,\(X\)就非常大,並且有的時候還是高維資料,想求矩陣\((X^TX)^{-1}X^T\)就變得十分複雜,後來就使用了梯度下降法來求。下面的邏輯斯蒂迴歸就是用的梯度下降。
矩陣求導推導
為了防止以後忘記,我在這裡面推導一下這倆個公式,首先講一些前提數學知識。矩陣求導不太好求,先來看標量求導,函式的輸入和輸出都是標量(一個值),那麼簡單
\[Y = AX \\
\frac{\partial Y}{\partial X} = A
\]
但是如果\(X\)和\(Y\)任意一個是向量的話,那麼導數的值也是一個向量,也就是有多個值,例如,假如\(X\)是向量,那麼函式\(f(X)\)就要與\(X\)中的每個值進行求導,就得到了多個值,那麼這多個值如何排列呢?如果\(X\)是向量,那麼縱向排列,如果\(Y\)是向量,那麼橫向排列,如果倆個都是的話,那麼倆個方向都要排列,我們來看一個例子,比如
\[X = \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} ,
A = \begin{bmatrix}
a_1 \\
a_2 \\
\vdots \\
a_n \\
\end{bmatrix} \\
Y = f(X) = A^TX = \sum\limits_{i=1}^{n}a_ix_i \\
\]
我們可以看到\(Y\)是一個標量,\(X\)是一個向量,那麼\(Y\)對向量\(X\)中的元素依次求導,並且縱向展開,那麼
\[\frac{\partial Y}{\partial X} =
\begin{bmatrix}
\frac{\partial f(X)}{\partial x_1} \\
\frac{\partial f(X)}{\partial x_2} \\
\vdots \\
\frac{\partial f(X)}{\partial x_n} \\
\end{bmatrix} =
\begin{bmatrix}
a_1 \\
a_2 \\
\vdots \\
a_n \\
\end{bmatrix} = A
\]
因為\(Y\)是一個標量,那麼它的轉置就是它本身\(A^TX = X^TA\),所以
\[\frac{\partial A^TX}{\partial X} = \frac{\partial X^TA}{\partial X} = A
\]
如果你還不懂,那麼我們再來看看\(Y\)是向量的情況下求導,比如
\[Y = f(x), 其中\\
f(x) = \begin{bmatrix}
f_1(x) \\
f_2(x) \\
\vdots \\
f_n(x) \\
\end{bmatrix} =
\begin{bmatrix}
a_1x \\
a_2x \\
\vdots \\
a_nx \\
\end{bmatrix}
\]
那麼\(Y\)肯定也是一個向量,對之進行求導,
\[\frac{\partial Y}{\partial X} =
\begin{bmatrix}
\frac{\partial f_1(x)}{\partial x} & \frac{\partial f_2(x)}{\partial x} & \dots & \frac{\partial f_n(x)}{\partial x} \\
\end{bmatrix} =
\begin{bmatrix}
a_1 & a_2 & \dots & a_n \\
\end{bmatrix}
\]
我們再來看\(\frac{\partial X^TAX}{\partial X} = (A + A^T)X\),假設
\[X = \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} , A = \begin{bmatrix}
a_{11} & a_{12} & \dots & a_{1n} \\
a_{21} & a_{22} & \dots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \dots & a_{nn} \\
\end{bmatrix}
\]
可以看出\(X^TAX\)是標量,但是\(X\)是向量,那麼先來看\(X^TAX\)
\[X^TAX = \begin{bmatrix}
x_1 & x_2 & \dots & x_n
\end{bmatrix} \begin{bmatrix}
a_{11} & a_{12} & \dots & a_{1n} \\
a_{21} & a_{22} & \dots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \dots & a_{nn} \\
\end{bmatrix} \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} = \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}a_{ij}x_ix_j
\]
這下可以進行求導
\[\frac{\partial X^TAX}{\partial X} = \begin{bmatrix}
\frac{\partial f(X)}{\partial x_1} \\
\frac{\partial f(X)}{\partial x_2} \\
\vdots \\
\frac{\partial f(X)}{\partial x_n} \\
\end{bmatrix} = \begin{bmatrix}
\sum\limits_{i=1}^{n}a_{i1}x_i + \sum\limits_{j=1}^{n}a_{1j}x_j \\
\sum\limits_{i=1}^{n}a_{i2}x_i + \sum\limits_{j=1}^{n}a_{2j}x_j \\
\vdots \\
\sum\limits_{i=1}^{n}a_{in}x_i + \sum\limits_{j=1}^{n}a_{nj}x_j \\
\end{bmatrix} = \begin{bmatrix}
\sum\limits_{i=1}^{n}a_{i1}x_i \\
\sum\limits_{i=1}^{n}a_{i2}x_i \\
\vdots \\
\sum\limits_{i=1}^{n}a_{in}x_i \\
\end{bmatrix} + \begin{bmatrix}
\sum\limits_{j=1}^{n}a_{1j}x_j \\
\sum\limits_{j=1}^{n}a_{2j}x_j \\
\vdots \\
\sum\limits_{j=1}^{n}a_{nj}x_j \\
\end{bmatrix}
\]
我們將上面展開就可以看出了
\[\frac{\partial X^TAX}{\partial X} = \begin{bmatrix}
\sum\limits_{i=1}^{n}a_{i1}x_i \\
\sum\limits_{i=1}^{n}a_{i2}x_i \\
\vdots \\
\sum\limits_{i=1}^{n}a_{in}x_i \\
\end{bmatrix} + \begin{bmatrix}
\sum\limits_{j=1}^{n}a_{1j}x_j \\
\sum\limits_{j=1}^{n}a_{2j}x_j \\
\vdots \\
\sum\limits_{j=1}^{n}a_{nj}x_j \\
\end{bmatrix} = \begin{bmatrix}
a_{11}x_1 + a_{21}x_2 + \dots + a_{n1}x_n \\
a_{12}x_1 + a_{22}x_2 + \dots + a_{n2}x_n \\
\vdots \\
a_{1n}x_1 + a_{2n}x_2 + \dots + a_{nn}x_n \\
\end{bmatrix} + \begin{bmatrix}
a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n \\
a_{21}x_1 + a_{22}x_2 + \dots + a_{2n}x_n \\
\vdots \\
a_{n1}x_1 + a_{n2}x_2 + \dots + a_{nn}x_n \\
\end{bmatrix} = \begin{bmatrix}
a_{11} & a_{21} & \dots & a_{n1} \\
a_{12} & a_{22} & \dots & a_{n2} \\
\vdots \\
a_{1n} & a_{2n} & \dots & a_{nn} \\
\end{bmatrix} \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} + \begin{bmatrix}
a_{11} & a_{12} & \dots & a_{1n} \\
a_{21} & a_{22} & \dots & a_{2n} \\
\vdots \\
a_{n1} & a_{n2} & \dots & a_{nn} \\
\end{bmatrix} \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix}
\]
由此可見
\[\frac{\partial X^TAX}{\partial X} = \begin{bmatrix}
a_{11} & a_{21} & \dots & a_{n1} \\
a_{12} & a_{22} & \dots & a_{n2} \\
\vdots \\
a_{1n} & a_{2n} & \dots & a_{nn} \\
\end{bmatrix} \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} + \begin{bmatrix}
a_{11} & a_{12} & \dots & a_{1n} \\
a_{21} & a_{22} & \dots & a_{2n} \\
\vdots \\
a_{n1} & a_{n2} & \dots & a_{nn} \\
\end{bmatrix} \begin{bmatrix}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix} = A^TX+ AX = (A^T + A)X
\]
自此對矩陣求導的推導完成。
嶺迴歸
上面我們知道嶺迴歸是為了解決\(X^TX\)不可逆的情況,並且也是解決過擬合的情況,下面我們簡單推導一下嶺迴歸,加入了正則化項\(L_2\)的話,\(L2\)正則化項,也稱為Ridge,就是\(P(W) = W^2 = W^TW\)這種形式,那麼就會變成
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2 + \lambda P(W)
\]
其中的\(\lambda P(W)\)就是懲罰項,具體也就是上面的\(L2\)正則化項
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2 + \lambda W^TW
\]
前面式子的推導過程上面都有,我就直接寫出來了,並且\(\lambda\)是個實數。
\[L(W) = W^TX^TXW - 2W^TX^TY + Y^TY + \lambda W^TW = W^T(X^TX + \lambda E)W - 2W^TX^TY + Y^TY
\]
下面還是進行求導,讓導數為0
\[\frac{\partial L(W)}{\partial W} = 2(X^TX + \lambda E)W - 2X^TY = 0
\]
最終得到
\[W = (X^TX + \lambda E)^{-1}X^TY = 0
\]
這裡面的\(X^TX\)是一個半正定矩陣,後面\(\lambda E\)是一個對角矩陣,那麼\(X^TX + \lambda E\)一定是可逆的。
極大似然估計推導
我們再來看圖一,圖中有多個點,我們換一個角度思考,這個座標系中可以有無數個點,為什麼是這幾個點被我們觀察到?為什麼出現的不是其他點,偏偏就是它們?難道這些點的背後隱藏著規律,而這個規律使得這些點出現的概率是最大,它們就是這個規律的天命點,它們就是最接近這個規律的點,那麼我們只要找到一個函式使得這些點出現的概率最大即可,我們現在不知道這個函式是多少,但是我們知道這個函式一定存在,並且固定,那麼將這個函式設定為
\[f(X) = W^TX
\]
那這個函式不可能完全擬合所有的點,肯定有點和它是有誤差的,我們設定這個誤差為\(\varepsilon\),每個點都和這個函式有誤差,那麼函式和誤差\(\varepsilon\)就共同組成了這些點,我們將之表示為
\[Y = f(X) + \varepsilon = W^TX + \varepsilon
\]
既然每個點都有一個誤差了,那麼這個誤差也會有一個概率分佈函式,我們假設概率分佈函式就是正態分佈
\[\varepsilon \thicksim N(0, \sigma^2)
\]
那麼\(Y\)肯定也是一個正態分佈,並且
\[Y|W,X \thicksim N(W^TX, \sigma^2) \\
P(y_i|x_i, W) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y - W^Tx_i)^2}{2\sigma^2}}
\]
這個就不證明了,這是概率論的基礎知識。現在我有了這些點出現的概率,我將這些點出現的概率最大來求函式引數\(W^T\)。
\[L(W) = In\prod\limits_{i=1}^{n}P(y_i|x_i, W) = \sum\limits_{i=1}^{n}InP(y_i|x_i, W) = \sum\limits_{i=1}^{n}In \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y_i - W^Tx_i)^2}{2\sigma^2}} =
\sum\limits_{i=1}^{n}(In \frac{1}{\sqrt{2\pi}\sigma} - \frac{(y_i - W^Tx_i)^2}{2\sigma^2})
\]
我們要求的是\(L(W)\)最大時候,\(W\)的值,那麼
\[W = arg \max\limits_{W} L(W) \\
W = arg \max\limits_{W} \sum\limits_{i=1}^{n}(In \frac{1}{\sqrt{2\pi}\sigma} - \frac{(y_i - W^Tx_i)^2}{2\sigma^2})
\]
我們可以看出前面的\(In \frac{1}{\sqrt{2\pi}\sigma}\)與\(W\)無關,那麼
\[W = arg \max\limits_{W} \sum\limits_{i=1}^{n}(- \frac{1}{2\sigma^2}(y_i - W^Tx_i)^2 \\
W = arg \min\limits_{W} \sum\limits_{i=1}^{n}(y_i - W^Tx_i)^2
\]
上面這個式子是不是有點熟悉,整體擬合誤差最小,這個式子和最小二乘法的計算公式是一樣的,從這裡也可以看出極大似然估計和最小二乘估計相差的就是一個正態分佈。
貝葉斯學派
不論是最小二乘和極大似然估計,它都有一個大前提,這些資料都是在某個確定的引數下產生,雖然我事先並不知道這個引數是什麼,但是通過這些產生的資料可以逆流而上反推這個確定的引數,那麼引數在我們眼裡就是客觀存在的,並不會改變,我們只要找出哪個值最有可能是真實引數就行,這其實就是機器學習中頻率派的思想。那麼你想想,難道這個世界真的是由一條條確定的規律組成的嗎?這個世界是確定的嗎?我們無法給出答案,因為我們是人類,沒有上帝視角,我們並不能說上面出現的點就是由某種確定的引數下產生,我們只能對世界有一個預先的估計,之後通過不斷地獲取資訊來調整之前的預估計,所以在我們眼裡,引數就不是確定的,每個值都有可能是引數,引數就是一個隨機值,那麼引數也是有分佈的,我們先對引數有一個先驗概率(預先估計),然後通過資料不斷地調整每個值是引數的概率,這也是貝葉斯學派的思想。
頻率派與貝葉斯學派,本想留到貝葉斯那章再講的,但是現在碰到了,只好先解釋一下,這二者是機器學習的倆大思想,其實本質上就是對引數空間上的認知不同。理解這二者的區別,總有一種哲學的感覺在裡面,就感覺在探討世界的起源一樣。
首先我們假設\(W \thicksim N(0, \sigma_0^2)\),之後我們需要利用這些資料來調整\(W\)的概率分佈,其實意思就是這些資料確定的情況下,引數的概率是多少,也就是一個後驗概率\(P(W|Y)\),通過概率論中的公式可以得到
\[P(W|Y) = \frac{P(Y|W)P(W)}{P(Y)}
\]
上面的式子其實也是貝葉斯公式,這裡的分母中Y就是資料,它是確定的,所以\(P(Y)\)可以去掉。我們想求的肯定是概率最大的情況,也就是後驗概率\(P(W|Y)\)最大的時候,這很好理解,你肯定選概率最大的值作為引數。
\[W = arg \max\limits_W In\prod\limits_{i=1}^{n} P(W|y_i) = arg \max\limits_W In\prod\limits_{i=1}^{n}P(y_i|W)P(W) = arg \max\limits_W \sum\limits_{i=1}^{n}InP(y_i|W)P(W)
\]
其中\(W \thicksim N(0, \sigma_0^2)\),並且之前極大似然估計的時候$Y|W,X \thicksim N(W^TX, \sigma^2) $,所以
\[P(y_i|x_i, W) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y_i - W^Tx_i)^2}{2\sigma^2}} \\
P(W) = \frac{1}{\sqrt{2\pi}\sigma_0}e^{-\frac{(W)^2}{2\sigma_0^2}} \\
P(Y|W)P(W) = \frac{1}{\sqrt{2\pi}\sigma}\frac{1}{\sqrt{2\pi}\sigma_0} e^{-\frac{(y_i - W^Tx_i)^2}{2\sigma^2} -\frac{(W)^2}{2\sigma_0^2}}
\]
下面基本和之前的化簡差不多了
\[W = arg \max\limits_W \sum\limits_{i=1}^{n}InP(y_i|W)P(W) = arg \max\limits_W \sum\limits_{i=1}^{n}In\frac{1}{\sqrt{2\pi}\sigma}\frac{1}{\sqrt{2\pi}\sigma_0} e^{-\frac{(y_i - W^Tx_i)^2}{2\sigma^2} -\frac{(W)^2}{2\sigma_0^2}} = arg \max\limits_W \sum\limits_{i=1}^{n}(In\frac{1}{\sqrt{2\pi}\sigma}\frac{1}{\sqrt{2\pi}\sigma_0} -\frac{(y_i - W^Tx_i)^2}{2\sigma^2} -\frac{(W)^2}{2\sigma_0^2})
\]
我們知道前面和\(W\)沒有關係,因此可以去除,變成
\[W = arg \max\limits_W \sum\limits_{i=1}^{n}(-\frac{(y_i - W^Tx_i)^2}{2\sigma^2} -\frac{(W)^2}{2\sigma_0^2}) \\
W = arg \min\limits_W \sum\limits_{i=1}^{n}(\frac{(y_i - W^Tx_i)^2}{2\sigma^2} +\frac{(W)^2}{2\sigma_0^2})
\]
將這個式子乘以一個\(2\sigma^2\),就可以得到
\[W_{MAP} = arg \min\limits_W \sum\limits_{i=1}^{n}((y_i - W^Tx_i)^2+\frac{\sigma^2}{\sigma_0^2}(W)^2)
\]
仔細看這個公式發現,它只是比前面多了一個\(\frac{\sigma^2}{\sigma_0^2}(W)^2\),這種形式非常像是前面的結果加了正則化項\(L_2\),看到嶺迴歸那裡,那麼嶺迴歸的\(\lambda\)可以對應\(\frac{\sigma^2}{\sigma_0^2}\),\(W)^2\)就是正則化項\(L_2\)。
結論
從上面總體就可以看出,最小二乘法LSE從概率的角度來看的話,就是噪聲為正態分佈的極大似然估計MLE,如果最小二乘加上正則化項Regularized LSE,那麼就等於最大後驗估計MAP。
邏輯斯蒂迴歸(logistic regression)
開始的時候我們說過高矮的問題,也說過給一個閾值的話,就可以將回歸應用到分類中。上面說的180作為高矮的閾值,但是它只能用在身高中,無法用於其他領域,比如胖瘦的區分,你不能說180了。那麼不同領域為什麼不能用同一個具體值?因為不同領域的量綱不一樣,正常人的身高應該在區間\([150,190]\),但是正常人的體重在\([90,160]\),那麼知道哪裡出問題,我們就可以解決,那麼統一量綱,那都轉化到區間\([0,1]\),轉化到其他的也行,主要是因為區間\([0,1]\)更熟悉,畢竟還可以看成概率,並且數學中也有現成的函式可以將數轉化到區間\([0,1]\)中,就是sigmoid函式,表示式如下所示,
\[\sigma(x) = \frac{1}{1 + e^{-x}}
\]
圖2. sigmoid函式
這個函式求導方便,也有優化穩定,還是一個連續函式,不像sign是一個躍階函式,之後它還會被用到神經網路中作為網路的啟用函式。
下面我們處理二分類問題,資料為\({(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)}\),既然我們現在有了sigmoid函式來統一量綱了,我們就可以將線性函式放進去了,變成
\[p = \sigma(x_i) = \frac{1}{1 + e^{-W^Tx_i}}
\]
量綱發生了改變,那麼最小二乘法的就無法使用,因為\(y_i - \frac{1}{1 + e^{-W^Tx_i}}\)並不能代表損失了。\(\sigma(x_i)\)結果區間就變成了\([0,1]\),如果我們將之看成概率的話,比如結果是0.1,表達的意思就是\(x_i\)屬於類別1的概率是0.1,屬於0的概率是0.9,假如結果只是\(p\),我們就可以表達成
\[P(y_i|x_i) = (p)^{y_i}(1-p)^{1-y_i}
\]
這裡的\(y_i\)就是真實類別,比如\(y_i = 1\),那麼屬於正確類別1的概率就是\(p\),當\(y_i = 0\),那麼屬於正確類別0的概率就是\(1-p\),完美的表達出我們想要的效果,這就是數學之美。
我們需要的是屬於正確類別的概率越大越好,這就用到了極大似然估計,將所有的概率相乘
\[P_{總} = P(y_1|x_1)P(y_2|x_2)\dots P(y_n|x_n) = \prod\limits_{i=1}^nP(y_n|x_n)
\]
依舊用對數函式將上面的乘法變成加法
\[P_{總} = \sum\limits_{i=1}^nIn P(y_n|x_n) = \sum\limits_{i=1}^nIn (p)^{y_i}(1-p)^{1-y_i} = \sum\limits_{i=1}^n y_i In (p) + (1-y_i)In(1-p)
\]
上面我們說了導數為0來求最值有很多缺點,這裡我們使用梯度上升,因為我們這裡想要概率最大,如果將\(-P_{總}\)作為損失函式來看的話,就是用梯度下降,我們想要損失最小。這裡我們就不加負號。計算都是一樣的計算。梯度上升法是把梯度看成上升最快的方向,至於為什麼,我們會在機器學習:優化方法中詳細聊一聊,這其實涉及到數學中的方向導數。現在只要知道梯度是最快的方向,梯度就是計算導數,我們想要求概率最大時候的\(W\),就要沿著梯度方向來增大\(W\),公式就是
\[W_{t+1} = W_t + \eta\frac{\partial P_{總}}{\partial W}
\]
這是一個更新公式,不是一個求值公式,我們肯定需要初始化最開始的\(W_0\)作為基準,直接更新這個\(W_0\),公式中\(W_t\)每次根據梯度方向\(\frac{\partial P_{總}}{\partial W}\)進行更新,更新的大小由步長\(\eta\)決定。就好像一個人爬山,你先自己選定一個上山的地點,之後每次沿著\(\frac{\partial P_{總}}{\partial W}\)行走\(\eta\)能夠最快到達山頂。
所以首先要計算梯度,也就是計算導數
\[\frac{\partial P_{總}}{\partial W} = \sum\limits_{i=1}^n y_i \frac{1}{p}\frac{\partial p}{\partial W} + (1-y_i)\frac{1}{1-p}\frac{\partial (1-p)}{\partial W}
\]
我們需要計算\(\frac{\partial p}{\partial W}\)和\(\frac{\partial (1-p)}{\partial W}\),我們知道\(p = \frac{1}{1 + e^{-W^Tx_i}}\),因此就是,
\[\frac{\partial p}{\partial W} = (\frac{1}{1 + e^{-W^Tx_i}})^{'} = \frac{1}{1 + e^{-W^Tx_i}}\frac{e^{-W^Tx_i}}{1 + e^{-W^Tx_i}}x_i = p(1-p)x_i \\
\frac{\partial (1-p)}{\partial W} = (\frac{ e^{-W^Tx_i}}{1 + e^{-W^Tx_i}})^{'} = - \frac{1}{1 + e^{-W^Tx_i}}\frac{e^{-W^Tx_i}}{1 + e^{-W^Tx_i}}x_i = -p(1-p)x_i
\]
將之帶入\(\frac{\partial P_{總}}{\partial W}\)可以得到
\[\frac{\partial P_{總}}{\partial W} = \sum\limits_{i=1}^n y_i \frac{1}{p}p(1-p)x_i + (1-y_i)\frac{1}{1-p}p(1-p)x_i = \sum\limits_{i=1}^n y_i (1-p)x_i - (1-y_i)px_i
\]
將結果式子分解合併成
\[\frac{\partial P_{總}}{\partial W} = \sum\limits_{i=1}^n (y_i - p)x_i = \sum\limits_{i=1}^n (y_i - \frac{1}{1 + e^{-W^Tx_i}})x_i
\]
之後我們還需要步長\(\eta\),初始化\(W_0 = 0\),對這個\(W_0\)進行運算相加,我們看一次更新就是
\[W_{1} = W_0 + \eta\sum\limits_{i=1}^n (y_i - \frac{1}{1 + e^{-W^Tx_i}})x_i
\]
梯度下降法和梯度上升法都差不多,就是把加號變成減號,梯度下降法有很多種,我們這裡用的就是最簡單的梯度上升法,計算所有資料的梯度,之後上升,這種做法的一次更新計算量很大,之後的優化就有了其他的梯度上升法,比如隨機梯度下降。
我們來整理一下邏輯迴歸的整個過程:
- 先對\(W_0\)和步長\(\eta\)進行初始化;
- 迴圈更新\(W_t\),先計算\(\sum\limits_{i=1}^n (y_i - \frac{1}{1 + e^{-W^Tx_i}})x_i\);
- 將之計算結果帶入公式\(W_{t} = W_{t-1} + \eta\sum\limits_{i=1}^n (y_i - \frac{1}{1 + e^{-W^Tx_i}})x_i\)中更新\(W\);
- 一直更新,直到梯度下降到一定程度,比如梯度為0了,結束更新,得到邏輯斯蒂迴歸方程\(\frac{1}{1 + e^{-W^Tx_i}}\)
邏輯迴歸最大的優勢就是可解釋強,每個\(w_i\)都反映了第\(i\)維屬性的權重,通過\(W\)可以看到分類中哪個屬性最重要,而偏置\(b\)雖然一直隱藏在矩陣\(W\)中,但是也是存在,如果它大於0,表明它更容易被判成正類,反之亦然,這說明它更傾向於哪一類。
還有就是邏輯斯蒂迴歸的決策邊界也是線性的,在二維資料情況下就是一條直線,我們可以來看一下,邏輯斯蒂迴歸的閾值是0.5,那麼決策邊界就是
\[\frac{1}{1 + e^{-W^Tx_i}} = 0.5
\]
我們可以看出\(e^{-W^Tx_i} = 1\)的時候才能滿足上面的式子,那麼\(-W^Tx_i = 0\),如果是二維資料,那麼這個公式就是直線的一般式,因此可以得知決策邊界確實是線性的。
迴歸樹
基礎決策樹就是ID3,C4.5和CART,其中ID3和C4.5的特徵分裂的評價標準都是以資訊熵為基礎,熵針對分類,計算方式都是以類別是離散值為基礎進行計算的,根本無法處理類別是連續值的迴歸問題。迴歸樹主要是指CART樹,首先宣告,CART樹是一個標準的二叉樹,分類任務中使用的是基尼係數來提純,並且CART樹也可以擴充到迴歸問題中,只不過用的就不是基尼係數了,而是利用均方誤差來找最優屬性,利用最小化均方誤差來找出最優屬性的最好切分點,首先就是找出一個屬性的所有切分點,然後對所有的切分點做均方誤差,找出最小誤差的那個切分點,計算所有屬性的最小切分點,得到最優屬性的最好切分點,這個過程也被稱為最小二乘法。然後將資料分成倆個分支之後,繼續在資料集上尋找最優屬性的最好切分點。
需要注意CART某一屬性使用過後依然可以被使用的,只要屬性不是隻有唯一值,它就不會丟棄該屬性,使用過的屬性還會被重複使用。這是因為CART樹是一個二叉樹,即使屬性是離散值,只要它的值有倆種以上,那麼一次分裂就不能完全挖掘出全部資訊,需要多次分裂才行。而ID3不能處理連續值,只能處理離散值,並且ID3是一個多叉樹,不管屬性有多少種離散值,都能被全部消耗。C4.5處理離散值和ID3同理,都是多叉樹,在連續屬性上,如果有多個的話,也是可以多次分裂的。那麼它的停止取決你指定的樹的深度。
它的過程可以簡單寫一下,假設資料集是\(D={(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)}\),其中\(x_i\)是p維資料,就是有p個屬性。
- 迴圈處理p個屬性,取出其中一個屬性\(j\),並且得出所有的切分點;
- 依次處理切分點,取出其中一個切分點\(s\),找出大於和小於這個切分點\(s\)的資料,計算倆邊的均值作為\(c_1\)和\(c_2\);
- 計算出倆邊的\(c_1\)和\(c_2\)之後,再根據下面的公式計算均方誤差MSE,
\[\sum\limits_{x_i^{j} <= s} (y_i - c_1)^2 + \sum\limits_{x_i^{j} > s} (y_i - c_2)^2
\]
選擇所有切分點中,MSE最小的那個切分點;
4. 選擇對比所有屬性的最好切分點,選擇最好屬性的最好切分點作為節點;
5. 對於其中的葉子節點,還需要計算出葉子節點的值作為輸出值,使用該節點中所有資料\(y\)的平均值作為該葉子節點的輸出值。
為了加深一下,可以來看一道簡單的例題
x |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
y |
5.56 |
5.7 |
5.91 |
6.4 |
6.8 |
7.05 |
8.9 |
8.7 |
9 |
9.05 |
第一步,因為資料屬性只有一個,我們直接找出這個屬性的全部切分點,分別是{1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5} 。
第二步,取切分點1.5,左邊資料只有1,那麼\(c_1 = 5.56\),右邊有2,3,4,5,6,7,8,9,10,那麼\(c_2 = \frac{5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05}{9} = 7.5\)。
第三步,計算切分點1.5的MSE,代入公式中得到
\[\sum\limits_{x_i^{j} <= s} (y_i - c_1)^2 + \sum\limits_{x_i^{j} > s} (y_i - c_2)^2 = (5.56 - 5.56)^2 + [(5.7 - 7.5)^2 + (5.91 - 7.5)^2+ \dots + (9.05 - 7.5)^2] = 15.72
\]
依次計算出所有切分點的MSE,如下表
s |
1.5 |
2.5 |
3.5 |
4.5 |
5.5 |
6.5 |
7.5 |
8.5 |
9.5 |
MSE |
15.72 |
12.07 |
8.36 |
5.78 |
3.91 |
1.93 |
8.01 |
11.73 |
15.74 |
在這個屬性中選擇切分點6.5。
第四步,選擇切分點6.5作為節點,左子樹的資料是{1,2,3,4,5,6},右子樹的資料是{7,8,9,10}。
第五步,假設我們設迴歸樹的深度就是2,那麼左節點的值就是\(c_1 = \frac{5.56 + 5.7 + 5.91 + 6.4 + 6.8 + 7.05}{6} = 6.24\),右節點的值就是\(c_2 = \frac{8.9+8.7+9+9.05}{4} = 8.91\)。
所以迴歸樹的數學表示式就是
\[T = \begin{cases}
6.24 & x < 6.5\\
8.91 & x \geqslant 6.5
\end{cases}
\]
總結
迴歸在我的研究中用的並不多,不過了解迴歸問題的方法也可以給我們一種不同的解題思路,我上面總結都是迴歸的入門基礎,迴歸經過這麼多年的研究,本身就產生了很多種方法,並且用到了不同的領域之中,我知道的只有增量學習迴歸判別,因為之前瞭解過一點增量學習裡面的方法。