迴歸,我第一次看到迴歸的時候,想的就是迴歸是什麼意思?後來看了一個答案解釋頗有意思,迴歸這個詞來自於生物學,在調查父母與子代身高問題的時候,發現父母若是太高的話,子女就會比父母矮一點,若是父母矮的話,子女又會比父母高,這使得身高不會向高矮倆個極端發展,而是趨於回到中心,後來作統計的時候引入統計學,迴歸就是數據會向平均值靠攏,更確切地說,數據的分佈遵循着某種規律,數據都會向這個規律靠近,就比如咱們作事都有一個原則,咱們每作一件事的時候,都會想一想這個原則,作出的事儘可能不會偏離這個原則。而咱們要作的就是找出這些數據的規律,並用數學表示出這個規律。網絡
引言
迴歸具體表如今數據中會是什麼樣的呢?咱們來看分類的數據都是什麼樣,分類數據的類別必然是離散的,由於分類本質上就是找出決策邊界,這個邊界多是線性的(這個邊界是個直線),也有多是非線性的(這個邊界是彎彎曲曲的),有邊界的前提就是類別必定是有限的,好比測身高,有監督(分類)模型能夠找出決策邊界告訴咱們這我的是高仍是矮,可是它必定得不到這我的的具體身高是多少,具體身高是一個連續值,再也不被邊界所束縛了,可是以前也說過身高不會隨便亂髮展,它也遵循着一種規律,那麼找出迴歸規律,對身高規律進行建模,以後計算就能獲得身高,這就是迴歸問題了。機器學習
簡單來講的話,迴歸數據的類別都是連續的,分類數據的類別都是離散的。函數
咱們能夠用迴歸模型來獲得具體身高,在現代很高女生認爲180以上就是高,如下就是矮,咱們就可使用獲得的具體身高來按照這個標準判斷這我的是高仍是矮,那麼也就是說給一個閾值的話,就能夠將回歸應用到分類中。學習
那麼如今的問題就是怎樣找出這個規律?在生活中,規律是說大部分人的行爲是符合一種特定的行爲,那麼咱們只要讓大部分數據符合咱們創建的模型就行,可是咱們知道數據不可能百分之一百符合,只能說是一種擬合,擬合就會有偏差,很天然就能夠想到當全部數據偏差最小時的模型就是咱們想要的模型,這也是一種權衡,選擇出距離全部的點之和最短的那條線。那麼問題就變成了模型如何表示?用數學上的線性和非線性函數來創建,而其中線性迴歸就是用線性函數來解決迴歸問題。優化
線性迴歸
線性函數來解決迴歸問題,說白了就是用一條直線來擬合全部數據,而且使總體擬合偏差最小。圖1就是一個線性迴歸圖示,用總體偏差最小的直線做爲迴歸方程,而這種選擇出距離全部的點之和最短的那條線也被稱爲最小二乘法。spa
圖1. 線性迴歸圖
最小二乘法推導
數學推導過程
咱們先用數學來表示出總體偏差,咱們用向量來表示數據,默認的向量都是列向量,假設blog
\[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\),計算仍是正常計算,只是要內心有數,知道這裏的偏置怎麼合併進去的。如今能夠寫出總體擬合偏差it
\[L(W) = \sum\limits_{i=1}^{n} (W^Tx_i - y_i)^2 \]
能夠將之進行分解io
\[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} \]
總結
迴歸在個人研究中用的並很少,不過了解迴歸問題的方法也能夠給咱們一種不一樣的解題思路,我上面總結都是迴歸的入門基礎,迴歸通過這麼多年的研究,自己就產生了不少種方法,而且用到了不一樣的領域之中,我知道的只有增量學習迴歸判別,由於以前瞭解過一點增量學習裏面的方法。