監督學習常見算法


GDA(高斯判別分析)

多個樣本聯合概率等於每個的乘積:

\[P(\boldsymbol{Y}|\boldsymbol{X}) = \prod_{i=1}^{m} P(y_i| x_i) \]

高斯判別分析試圖求出\(\hat y={\arg\max}_y{P(\boldsymbol x|y)P(y)}\ ,\quad y\in\{0,1\}\)

多元高斯分布
\(n\)維隨機向量\(\boldsymbol{x}=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^T\),存在\(\boldsymbol{\mu}=\begin{bmatrix}\mu_1&\mu_2&\cdots&\mu_n\end{bmatrix}^T\)\(\boldsymbol{\Sigma}=\begin{bmatrix}\text{Cov}(x_1,x_1)&\text{Cov}(x_1,x_2)&\cdots&\text{Cov}(x_1,x_n)\\\text{Cov}(x_2,x_1)&\text{Cov}(x_2,x_2)&\cdots&\text{Cov}(x_2,x_n)\\\vdots&\vdots&\ddots&\vdots\\\text{Cov}(x_n,x_1)&\text{Cov}(x_n,x_2)&\cdots&\text{Cov}(x_n,x_n)\\\end{bmatrix}\)\(\boldsymbol{\Lambda}=\boldsymbol{\Sigma}^{-1}\)

\(\boldsymbol{x}\)的聯合概率密度為:

\[f(\boldsymbol x)=(2\pi)^{-\frac{n}{2}}{\mid\boldsymbol{\Sigma}\mid}^{-\frac{1}{2}}e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^T\boldsymbol{\Lambda}(\boldsymbol{x}-\boldsymbol{\mu})} \]

\(\boldsymbol{x}\)服從\(n\)元高斯分布。其中\(\mid\boldsymbol{\Sigma}\mid\)\(\boldsymbol{\Sigma}\)的行列式
\(\boldsymbol{x}\)各個分量都相互獨立時\(\boldsymbol{\Sigma}\)為對角矩陣

對於能分成兩類的樣本\(X=\{\boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_m\}\ ,\quad \boldsymbol{x}_j=\begin{bmatrix}x_{j,1}&x_{j,2}&\cdots&x_{j,n}\end{bmatrix}^T\ ,\ j=1,2,\cdots,m\),其類別\(\boldsymbol{Y}\thicksim B(\phi)\ ,\quad\phi=\frac{\sum_{j=1}^mI\{y_j=1\}}{m}\ ,\ \boldsymbol{Y}=\begin{bmatrix}y_1&y_2&\cdots&y_m\end{bmatrix}^T\),對於每類樣本有:

\[\begin{matrix}\boldsymbol x_j|y_j=0\thicksim N(\boldsymbol \mu_0,\boldsymbol{\Sigma})\ ,\ \boldsymbol x_j|y_j=1\thicksim N(\boldsymbol \mu_1,\boldsymbol{\Sigma})\end{matrix}\ , \]

$$\boldsymbol \mu_k=\frac{\sum_{j=0}^m(I\{y_j=k\}\boldsymbol x_j)}{\sum_{j=1}^mI(y_j=k)},k\in \{0,1\}$$

\[\boldsymbol{\Sigma}=\frac{1}{m}\sum_{j=1}^m(\boldsymbol x_j-\boldsymbol \mu_{y_j})(\boldsymbol x_j-\boldsymbol \mu_{y_j})^T \]

指數型分布族:分布律或概率密度滿足\(P(y;\boldsymbol{\eta})=b(y)e^{\boldsymbol{\eta}^TT(y)-a(n)}\),其中\(\boldsymbol{\eta}\)自然參數,通常充分統計量\(T(y)=y\),固定參數\(a\)\(b\)\(T\)上公式可以定義一種概率分布。

\(\begin{cases} x\mid y=1\thicksim ExpFamily(\mu_1)\\ x\mid y=0\thicksim ExpFamily(\mu_0)\end{cases}\)\(\Rightarrow\)\(P(y=1\mid x)\text{是logistic函數}\)

NBM(朴素貝葉斯)

貝葉斯公式

\[P(B_i\mid A)=\frac{P(B_i)P(A\mid B_i)}{\sum_{j=1}^n P(B_j)P(A\mid B_j)} \]

\(m\)個樣本,每個樣本有\(n\)個屬性:\(\boldsymbol{x}=\begin{bmatrix}x_{1,1}&x_{1,2}&\cdots&x_{1,n}\\x_{2,1}&x_{2,2}&\cdots&x_{2,n}\\\vdots&\vdots&\ddots&\vdots\\x_{m,1}&x_{m,2}&\cdots&x_{m,n}\end{bmatrix}\)
樣本的類別:\(\boldsymbol{y}=\begin{bmatrix}y_{1}\\y_{2}\\\vdots\\y_{m}\end{bmatrix},y_j\in\mathcal{y}\),其中\(\mathcal{y}=\{c_1,c_2,\cdots,c,\cdots,c_p\}\)\(p\)個類別;

對於一個樣本\(x\),選擇能使后驗概率\(P(c\mid x)\)最大的\(c\)作為\(x\)的類別\(\hat{y}\)。朴素貝葉斯的訓練過程就是基於訓練集\(\boldsymbol{x}\)來估計后驗概率\(P(c\mid \boldsymbol{x}_j)\),設\(\forall j=1,2,\cdots m\)\(x_{j}\)的每個屬性都是相互獨立的,則有\(P(c\mid \boldsymbol{x}_j)=\frac{P(c)P(\boldsymbol{x}_j\mid c)}{P(\boldsymbol{x}_j)}=\frac{P(c)}{P(\boldsymbol{x}_j)}\prod_{i=1}^nP(x_{j,i}\mid c)\)

求函數能使\(f(x)\)取得最大值的所有\(x\)值:

\[{\arg\max}_{x\in S \subseteq x}{f(x)}=\{x\mid x \in S \cap \forall t\in S:f(t)<f(x)\} \]

$$\hat{y}_j={\arg\max}_{c\in\mathcal{y}}{f_j(c)},$$ $$f_j(c)={P(c)\prod_{i=1}^{n}{P(x_{j,i}\mid c)}}$$ $f_j(c)$解釋為 $\boldsymbol{x}_j$的類別為$c$的概率 與 在$\boldsymbol{x}_j$的類別為$c$條件下$x_{j,i}$取當前值的概率 之積 之積,就是用於比較的后驗概率了。分母$P(\boldsymbol{x}_j)$通常是定值故忽略。

常見分布律、分布函數

朴素貝葉斯中樣本屬性等都是隨機變量,其分布函數(律)中參數即訓練參數,利用極大似然估計去確定這些參數。

極大似然估計

假定樣本滿足某一分布,試圖求這個分布的分布函數(律)中參數。

\(\mathcal{x}_c\)為由\(\boldsymbol{x}\)中類別為\(c\)的樣本組成的集合,則:

\[L(\boldsymbol{\theta}_c)=P(\mathcal{x}_c|\boldsymbol{\theta}_c)=\prod_{\boldsymbol{x}\in \mathcal{x}_c}{P(\boldsymbol{x}\mid \boldsymbol{\theta}_c)} \]

通常為了便於后續計算取對數,然后的對數似然函數

\[LL(\boldsymbol{\theta}_c)=\log L(\boldsymbol{\theta}_c)=\sum_{j=0}^m{I\{y_j=c\}\log(P(\boldsymbol{x}_j\mid \boldsymbol{\theta}_c))} \]

\[\boldsymbol{\theta}_c^{new}={\arg\max}_{\boldsymbol{\theta}_c}LL(\boldsymbol{\theta}_c) \]

NN(人工神經網絡)

將生物神經元抽象為一種數學模型。每一個神經元都有敏感程度不同的突觸用來接收信號,無論這些輸入信號多么強或多么弱,神經元的輸出總在一個狹窄的區間里,這是加權求和再進行某種非線性變換的結果。NN有很多參數,並且NN在數據較多時效果較好。

神經元與人工神經元
NN原理簡單,如下圖所示:
人工神經網絡

上圖還包括了BP算法(誤差逆傳播算法),它為NN更新每個神經元的權值。

對樣本\(\boldsymbol{X}=\begin{bmatrix}x_0&x_1&x_2&\cdots&x_{I_0}\end{bmatrix}^T\),NN使\(\boldsymbol{X}\)作為無前驅神經元的神經元的輸出(注意不是輸入),並試圖獲得無后繼神經元的一個或幾個神經元的輸出作為神經網絡的輸出。這些無前驅的神經元構成輸入層,無后繼的神經元構成輸出層,其余按照其連接次序構成隱層(可以有許多層),隱層和輸出層神經元會參與誤差逆傳播的過程而輸入層不會,輸入層也沒有閾值\(x_0\)。所謂閾值就是一個固定的值加在輸入的一個特定位置中一起交給神經元計算,對應於閾值的權值也會在逆傳播中更新,但是“閾值的誤差”傳遞到哪里去了呢?消失了,因為閾值類似輸入層神經元,是不參與逆傳播的。NN的學習過程為計算每一個神經元的權重\(\boldsymbol{W}\)\(^l\boldsymbol{W}=\begin{bmatrix}^lw_{1,0}&^lw_{1,1}&\cdots&^lw_{1,i}&\cdots&^lw_{1,I_l}\\^lw_{2,0}&^lw_{2,1}&\cdots&^lw_{2,i}&\cdots&^lw_{2,I_l}\\\vdots&\vdots&\ddots&\vdots&\ddots&\vdots\\^lw_{j,0}&^lw_{j,1}&\cdots&^lw_{j,i}&\cdots&^lw_{j,I_l}\\\vdots&\vdots&\ddots&\vdots&\ddots&\vdots\\^lw_{J_l,0}&^lw_{J_l,1}&\cdots&^lw_{J_l,i}&\cdots&^lw_{J_l,I_l}\end{bmatrix}\ ,\quad l=0,1,\cdots,L\ ,\ i=1,2,\cdots,I_l\ ,\ j=1,2,\cdots,J_l\)。權重\(\boldsymbol{W}\)是三維的但不是“三維矩陣”,因為每層的尺寸未必相同。左上角標\(l\)代表層序號,\(l=0\)代表輸入層。\(L\)為總層數,也叫深度,包含許多隱層的復雜神經網絡形成深度學習\(J_l\)為第\(l\)層神經元個數,也叫寬度\(I_l\)為第\(l\)層的輸入值的屬性數,它可以是樣本\(\boldsymbol{X}\)的屬性數也可以是\(J_{l-1}+1\),即\(I_l=J_{j-1}\)。上圖的\(I\)\(J\)都沒寫角標,但注意不同層的\(I\)\(J\)往往不相同。

Python3簡單實現:點我看代碼

SVM(支持向量機)

SVM有嚴格的數學理論支持,不依靠統計方法;利用核函數可以處理非線性分類任務;最終決策函數只由少數樣本所確定(不代表SVM會丟棄樣本,SVM復雜度是和樣本數有關的),所以SVM避免了維數災難並對缺失值敏感。SVM算法時間和空間復雜度都較大,適用於少量樣本分類任務。\(\boldsymbol{x}=\begin{bmatrix}x_{1,1}&x_{1,2}&\cdots&x_{1,n}\\x_{2,1}&x_{2,2}&\cdots&x_{2,n}\\\vdots&\vdots&\ddots&\vdots\\x_{m,1}&x_{m,2}&\cdots&x_{m,n}\end{bmatrix}^T\)\(m\)條樣本(沒錯需要轉置,這里訓練集的每條樣本的屬性都是豎着的一列),它的類別為\(\boldsymbol{y}=\begin{bmatrix}y_{1}&y_{2}&\cdots&y_{m}\end{bmatrix}^T\)。對於新樣本\(\boldsymbol{x}^+\),SVM試圖求解:

\[\hat y=f_{\boldsymbol{\alpha}}(\boldsymbol x)=g\Big(\sum_{j=1}^m{\alpha_j y_j\kappa(\boldsymbol x_j,\boldsymbol{x}^+)+b}\Big)\ ,\quad g(z)=\begin{cases}+1&,z\geq0\\-1&,otherwise\end{cases} \]

SVM通過改變參數\(\boldsymbol{\alpha}\)來使\(f\)正確分類

\[\boldsymbol\alpha^{new}=\max_{\boldsymbol{\alpha}}W(\boldsymbol{\alpha})\quad \text{s.t.}\ \sum_{j=1}^m{\alpha_j y_j}=0\ ,\ C\geq\alpha_j\geq 0\ ,\ j,k=1,2,\cdots m \]

其中\(W\)是一個函數:

\[W(\boldsymbol{\alpha})=\sum_{j=1}^m\alpha_j-\frac{1}{2}\sum_{j=1}^m\sum_{k=1}^m{\alpha_j\alpha_ky_j y_k\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)} \]

然后這個\(\hat{\boldsymbol{\alpha}}\)就用來預測新的數據了(之前參數用的都是\(\hat{\boldsymbol{\theta}}\))。\(\boldsymbol{\alpha}\)初值為\(\boldsymbol{0}\)\(C\)為常數,描述SVM對個別數據分類出錯的容忍程度。函數\(g\)可以認為是sigmoid函數。\(W\)里面還有個\(\kappa\)\(\kappa\)核函數,也是一個函數。

常見核函數

  核函數             \(\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)\)            參數說明  
線性核 \(\boldsymbol{x}_j^T\boldsymbol{x}_k\)
多項式核 \((\boldsymbol{x}_j^T\boldsymbol{x}_k)^d\ ,\quad d\geq 1\) \(d\)為多項式次數
高斯核 \(e^{\frac{{\Vert\boldsymbol{x}_j-\boldsymbol{x}_k\Vert}^2}{-2\sigma^2}\ ,\quad \sigma>0}\) \(\sigma\)為width
拉普拉斯核 \(e^{\frac{{\Vert\boldsymbol{x}_j-\boldsymbol{x}_k\Vert}}{-\sigma}\ ,\quad \sigma>0}\)
sigmoid核 \(\tanh(\beta\boldsymbol{x}_j^T\boldsymbol{x}_k+\theta)\ ,\quad\beta>0,\theta<0\)

\(\boldsymbol{\alpha}\)中的值\(\alpha_j\)\(\alpha_k\),注意一次取兩個值,則有:

\[E_j=\hat{y}_j-y_j\ ,\ E_k=\hat{y}_k-y_k \]

\[L=\begin{cases}\max(0,\alpha_k-\alpha_j)\ ,& y_j\not =y_k\\\max(0,\alpha_k+\alpha_j-C)\ ,& y_j=y_k\end{cases} \]

\[H=\begin{cases}\max(C,\alpha_k-\alpha_j+C)\ ,& y_j\not =y_k\\\max(0,\alpha_k+\alpha_j)\ ,& y_j=y_k\end{cases} \]

\[\alpha_k^{new}=\min\bigg(H,\max\bigg(L, \alpha_k+\frac{y_k(E_j-E_k)}{\kappa(\boldsymbol{x}_j,\boldsymbol{x}_j)+\kappa(\boldsymbol{x}_k,\boldsymbol{x}_k)-2\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)}\bigg)\bigg) \]

\[\alpha_j^{new}=\alpha_j+(y_jy_k)(\alpha_k-\alpha_k^{new}) \]

\[b^{new}=\begin{cases}b_j\ ,&\alpha_j\in(0,C)\\b_k\ ,&\alpha_k\in(0,C)\\\frac{b_j+b_k}{2}\ ,&\text{otherwise}\end{cases}\ ,\quad\begin{matrix}b_j=b-E_j-y_j\kappa(\boldsymbol{x}_j,\boldsymbol{x}_j)(\alpha_j^{new}-\alpha_j)-y_k\kappa(\boldsymbol{x}_k,\boldsymbol{x}_j)(\alpha_k^{new}-\alpha_k)\\b_k=b-E_k-y_j\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)(\alpha_j^{new}-\alpha_j)-y_k\kappa(\boldsymbol{x}_k,\boldsymbol{x}_k)(\alpha_k^{new}-\alpha_k)\end{matrix} \]

迭代更新參數$\boldsymbol{\alpha}$和$b$直至收斂。

以上的似乎使得“支持向量機”這個名字變得無法理解。那么請看以下:

\(\boldsymbol{x}=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}\)則L2范數\(\|\boldsymbol{x}\|=\sqrt{\sum_{i=1}^n{{\mid x_i\mid}^2}}\)

在樣本空間中類別為\(y\in\{-1,+1\}\)的任意一個點\(\boldsymbol{x}_j=\begin{bmatrix}x_{j,1}&x_{j,2}&\cdots&x_{j,n}\end{bmatrix}^T\)超平面\(\boldsymbol{w}^T\boldsymbol{x}+b=0\)的距離為函數間隔\(\hat{\gamma}=y(\boldsymbol{w}^T\boldsymbol{x}+b)\)。但是函數間隔會受到參數影響,超平面不變情況下參數同乘一個數的話函數間隔會變,所以采用幾何間隔\(\gamma_j=y_j\big((\frac{\boldsymbol{w}}{\|\boldsymbol{w}\|})^T\boldsymbol{x}_j+\frac{b}{\|\boldsymbol{w}\|}\big)=\frac{\hat{\gamma}_j}{\|\boldsymbol{w}\|}\)描述樣本點\(\boldsymbol{x}_j\)到超平面的距離\(\boldsymbol{w}=\begin{bmatrix}w_1&w_2&\cdots&w_n\end{bmatrix}\)為法向量。

\(\boldsymbol{x}_j\)可能是線性不可分的,則需要\(\varphi(\boldsymbol{x})\)函數將自變量映射至更高維度的特征空間,因為如果原始空間是有限維則必然存在一個高維特征空間使樣本可分。SVM並不是采用多么復雜的界線去分隔數據,而是為數據添加一些“計算屬性”從而將數據映射到高維空間中再線性分割。

如果原始空間是有限維則必然存在一個高維特征空間使樣本可分

\[\exists\varphi\quad\text{s.t.}\ \kappa(\boldsymbol x_j,\boldsymbol x_k)=\varphi(\boldsymbol x_j)^T\varphi(\boldsymbol x_k)\Leftrightarrow \boldsymbol{z}^T\boldsymbol{\kappa}\boldsymbol{z}\geq 0\ ,\quad \kappa_{j,k}=\kappa(\boldsymbol x_j,\boldsymbol x_k)\ ,\ \boldsymbol{z}\in\mathbb{R}^m\ ,\ j,k=1,2,\cdots,m \]

其中\(\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)\)核函數。這樣就不用去計算函數\(\varphi\)了,\(\varphi(\boldsymbol x_j)^T\varphi(\boldsymbol x_k)\)具體形態參見上文核函數表。

任何一個求極大值的線性規划問題都有一個求極小值的對偶問題與之對應,反之亦然。對偶問題可能比原問題更易求解。SVM試圖找到\(\boldsymbol{w}\)\(b\)使\(\gamma\)最大,將不同類別的樣本分開,並且這個超平面盡可能遠離樣本。所以優化目標為

\[\max_{w,b}{\frac{\hat\gamma}{\|\boldsymbol{w}\|}}\quad\text{s.t.}\ y_j(\boldsymbol{w}^T\varphi(\boldsymbol{x}_j)+b)\geq\hat\gamma,\quad j=1,2,\cdots,m\ \]

\(\hat{\gamma}=1\)則等價於(便於計算):

\[\min_{\boldsymbol{w},b}\frac{\|\boldsymbol{w}\|^2}{2}\quad\text{s.t.}\ y_j(\boldsymbol{w}^T\varphi(\boldsymbol{x}_j)+b)\geq 1,\quad j=1,2,\cdots,m \]

其拉格朗日函數:

\[L(\boldsymbol{w},b,\boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^2+\sum_{j=1}^m{\alpha_j\Big(1-y_j\big(\boldsymbol{w}^T\varphi(\boldsymbol{x}_j)+b\big)\Big)} \]

其對偶問題:

\[\max_{\boldsymbol{\alpha}}\sum_{j=1}^m\alpha_j-\frac{1}{2}\sum_{j=1}^m\sum_{k=1}^m{\alpha_j\alpha_k y_j y_k\kappa(\boldsymbol{x}_j,\boldsymbol{x}_k)}\quad \text{s.t.}\ \sum_{j=1}^m{\alpha_j y_j}=0\ ,\ \alpha\geq 0\ ,\ j,k=1,2,\cdots m \]

當超平面將樣本不同類別樣本分開時,能使上面的\(\hat\gamma=1\)成立的\(\boldsymbol{x}\)即為支持向量兩個不同類別的支持向量到超平面的距離之和為\(\gamma=\frac{2}{\|\boldsymbol{w}\|}\)
同時易\(w_i=\sum_{j=0}^m{\alpha_j y_j x_{j,i}}\)\(\boldsymbol{w}=\sum_{j=0}^m{\alpha_j y_j \boldsymbol{x}_j}\)

拉格朗日乘數法

在一組條件\(\phi(\boldsymbol{x})=\begin{bmatrix}\phi_1(\boldsymbol{x})\\\phi_2(\boldsymbol{x})\\\vdots\\\phi_n(\boldsymbol{x})\end{bmatrix}=\boldsymbol{0}\ ,\quad i=1,2,\cdots,n\)下求函數\(f(\boldsymbol{x})\)極值點(如有),即:

\[\min_w f(\boldsymbol{x})\quad \text{s.t.}\ \phi(\boldsymbol{x})=\boldsymbol{0} \]

有拉格朗日函數:

\[L(\boldsymbol{x},\boldsymbol\alpha)=f(\boldsymbol{x})+\sum_{i=1}^n{\alpha_i \phi_i(\boldsymbol{x})} \]

其中\(\boldsymbol\alpha\)為拉格朗日乘數。
\(\frac{\partial{L}}{\partial{\boldsymbol{x}}}=0\)\(\frac{\partial L}{\partial \boldsymbol\alpha}=0\)得:
\(P(\boldsymbol{x}^*)\)是駐點\(\Leftarrow \exists \boldsymbol{\alpha}^*\quad\text{s.t.}\ \frac{\partial{L(\boldsymbol{x}^*,\boldsymbol{\alpha}^*)}}{\partial\boldsymbol{x}}=0,\frac{\partial{L(\boldsymbol{x}^*,\boldsymbol{\alpha}^*)}}{\partial\boldsymbol{\alpha}}=0\)

選擇能讓樣本線性可分的核函數實際上是一件非常困難的事情,兩類樣本的邊界可能十分模糊,當SVM將樣本完全分開時基本上已經過擬合了。這時要采用軟間隔,允許少量樣本沒有被正確分類。所以優化目標為:

\[\min_{\boldsymbol{w},b}\frac{1}{2}\|\boldsymbol{w}\|^2+C\sum_{i=j}^m{\xi_j}\quad \text{s.t.}\ y_j(\boldsymbol{w}^T\boldsymbol{x}_j+b)\geq 1-\xi_j\ ,\ \xi_j\geq 0 \]

其對偶問題:

\[\max_{\boldsymbol{\alpha}}W(\boldsymbol{\alpha})\quad \text{s.t.}\ \sum_{j=1}^m{\alpha_j y_j}=0\ ,\ C\geq\alpha_j\geq 0\ ,\ j=1,2,\cdots m \]

其中\(\xi\)松弛變量\(C\)為常量,\(C>\alpha_j>0\Rightarrow y_j(\boldsymbol{w}^T\boldsymbol{x}_j+b)=1\)。就得到上文中的函數\(W\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM