目錄html
博客園的渲染有點問題:能夠看個人博客效果會更好:https://wangjs-jacky.github.io/2019/11/07/%E8%A5%BF%E7%93%9C%E4%B9%A6%E7%AC%AC%E5%85%AD%E7%AB%A0-SVM/
SVM算法其實不難主要是思路很差整理。本篇博客的資料來源於西瓜書,鄒博,白板書筆記三處。具體的理論背景就不作具體介紹了,直接上公式。git
SVM這章的內容主要打算分爲三塊:github
SVM的目標就是找到一個劃分超平面把兩類數據劃分開來,經過下面這張圖能夠發現這樣的超平面有很是多,可是憑直覺發現粗的那跟線(超平面)劃分效果最好。算法
補充:超平面的公式??app
公式描述:函數
公式中的直線方程爲\(Ax+By+C=0\),點\(P\)的座標爲\((x_0,y_0)\)。優化
\[ d=\left|\frac{A x_{0}+B y_{0}+C}{\sqrt{A^{2}+B^{2}}}\right| \]spa
根據點到直線的距離,每一類樣本中的全部樣本點到直線的距離爲:.net
\[ margin = r = \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} \]
將上述最小的值(min)做爲單側的 \(margin\)設計
\[ margin = 2 \times \min _{w, b, x_{i}} \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} \]
注1:剛開始學總覺得單側margin能夠取到0,實際上這裏漏加了一個條件。設置標籤\(y_i\in\{-1,+1\}\)
\[ \left\{ \begin{array}{l} w^Tx_i+b>0\\ w^Tx_i+b<0\\ \end{array} \right. \begin{array}{c} y_i=+1\\ y_i=-1\\ \end{array} \]
加入了這個條件後,保證了分類必定正確。注2:這裏的\(y\)的標籤必定爲{+1,-1} ?
答:否,y只是一個標籤而已,能夠爲其他值,只須要知足上式的分類準則而已。可是這裏取1,確實爲了計算方便,見下面如何去掉絕對值的過程,就能體會到y爲啥取正負1
根據注1能夠推導出,條件知足於\(y_i(w^Tx_i+b)\ge0\),\(y_i\)與\((w^Tx_i+b)\)同號
\[ margin = 2 \times \min _{w, b, x_{i}} \frac{\left|w^{T} x_{i}+b\right|}{\|w\|} = 2 \times \min _{w, b, x_{i}} \frac{y_i(w^Tx_i+b)}{\|w\|} \]
\[ \begin{array}{l}{\max _{w, b} \frac{1}{\|w\|} 2 \times \min _{x_{i}, y_{i}} y_{i}\left(w^{T} x_{i}+b\right)} \\ {\text { s.t. }} \\ {y_{i}\left(w^{T} x_{i}+b\right) \geqslant 0, i=1, \ldots, m}\end{array} \]
\[ y_i(w^Tx_i+b)>0 \Rightarrow \exists \gamma>0 ,\ s.t.\ min\ y_i(w^Tx_i+b)=\gamma \]
令\(\gamma = 1:\)
\[ s.t.\ min\ y_i(w^Tx_i+b)=\gamma\\ \Rightarrow y_i(w^Tx_i+b) \ge 1,i=1,\dots,N \]
上述能夠這樣作的緣由:
綜上上述條件能夠變爲:
\[ \begin{array}{l}{\max _{w, b} \frac{2}{\|w\|}} \\ {\text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geq 1, \quad i=1,2, \ldots, m}\end{array} \]
進一步能夠簡化爲:
\[ \begin{array}{l}{\min _{w, b} \frac{1}{2}\|w\|^{2}} \\ {\text {s.t.} y_{i}\left(w^{T} x_{i}+b\right) \geq 1, \quad i=1,2, \dots, m}\end{array} \]
凸二次規劃
問題
當目標函數和約束條件都爲變量的線性函數
-- 線性規劃問題
當目標函數爲:變量的二次函數
;當約束條件爲:變量的線性函數
-- 二次規劃問題
當目標函數和約束條件都爲非線性函數
-- 非線性規劃問題
\[ L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}+\sum_{i=1}^{m} \alpha^{i}\left(1-y_{i}\left(w^{T} x_{i}+b\right)\right)\\ s.t. \alpha_i \ge 0 \]
根據兩個補充知識點1、二(本節最後) 可得對偶條件:
\[ \min _{w, b} \max_{\alpha}L(w,b,\alpha) \Leftrightarrow \max_{\alpha}\min _{w, b}L(w,b,\alpha) \\ s.t. \alpha_i \ge 0 \]
⭐插入KKT條件:
\[ L(x, \alpha, \beta)=f(x)+\sum_{i=1}^{m} \alpha_{i} h_{i}(x)+\sum_{j=1}^{n} \beta_{i} g_{i}(x) \]
\[ \begin{aligned} \nabla_{x} L(x, \alpha, \beta) &=0 \\ \beta_{j} g_{j}(x) &=0, j=1,2, \ldots, n \\ h_{i}(x) &=0, i=1,2, \ldots, m \\ g_{j}(x) & \leq 0, j=1,2, \ldots, n \\ \beta_{j} & \geq 0, j=1,2, \ldots, n \end{aligned} \]
介紹KKT條件比較好的博客:http://www.javashuo.com/article/p-kchfpcrr-ng.html
根據\(KKT\)第一個結論可有:
\[ \min _{w,b}L\left( w,b,\alpha \right) \ \rightarrow \ \nabla _w/\nabla _bL\left( w,b,\lambda \right) =0 \]
求導後可得:
\[ \begin{aligned} \hat w = & \sum_{i=1}^n \alpha_iy_ix_i\\ 0 = & \sum_{i=1}^n \alpha_iy_i \end{aligned} \]
將\(\hat w\)代入拉格朗日條件:
\[ \begin{aligned} L\left( w,b,x \right) = & \frac{1}{2}\lVert w \rVert ^2+\sum_{i=1}^n{\alpha ^i\left( 1-y_i\left( w^Tx_i+b \right) \right)}\\ = & \frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i-\sum_{i=1}^n{\alpha ^iy_i\left( \sum_{i=1}^n{\alpha _iy_ix_{i}^{T}x_j} \right) -\sum_{i=1}^n{\alpha ^iy_ib}}}\\ =&-\frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i} \end{aligned} \]
求\(\hat b\) :【根據SVM最大間隔分界線可得】
\[ y_i(w^Tx_i+b)-1 =0\\ y_iy_i(w^Tx_i+b)-y_i=0\\ \hat b = y_i - w^Tx_i \]
其實這裏省略了不少能內容,爲啥子b是在最大間隔分界上求到的b,由於根據KKT條件,可知只有在分界線上拉格朗日乘子\(\alpha _i\)才大於0,分解線外的樣本對建模無心義,因此\(\hat{b}\)必知足與等式\(y_i(w^Tx_i+b)-1 =0\)在正則化那章有過更爲詳細的分析,見下。
\[ \begin{aligned} \hat w ={} & \sum_{i=1}^n \alpha_iy_ix_i\\ \hat b ={} & y_i - w^Tx_i \end{aligned} \]
\[ L\left( w,b,x \right)=-\frac{1}{2}\sum_{i,j=1}^n{\alpha _i}\alpha _jy_iy_jx_{i}^{T}x_j+\sum_{i=1}^n{\alpha ^i} \\ s.t. \sum_{i=1}^n \alpha_iy_i=0, \alpha_i \ge 0,i=1,2,\dots,n \]
最後一步:經過\(SMO\)算法求出 \(\alpha_i\)【太難看不懂】
最終可求解出模型\(f(x)\):
\[ \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned} \]
補充1:KKT(互補鬆弛條件)【slackness complementory】
這是不等式的條件約束問題化爲無條件約束問題。
當\((1-y_{i}\left(w^{T} x_{i}+b\right)\le0\)時,則\(min\ \alpha^i(1-y_{i}\left(w^{T} x_{i}+b\right)=0\) \(\Rightarrow minL=\frac{1}{2}\|w\|^2\)
當\((1-y_{i}\left(w^{T} x_{i}+b\right)>0\)時,則\(min\ \alpha^i(1-y_{i}\left(w^{T} x_{i}+b\right)\rightarrow+\infty\) \(\Rightarrow\) 求最小值無心義。
故通過上述分析,能夠得若要知足上述,自然知足1這個條件。
補充2:對偶問題【極大極小值互換】
這裏若要講清楚仍是比較有困難的。對偶關係分爲兩類,強對偶關係以及弱對偶關係。
弱對偶關係【簡單記憶:雞頭鳳尾】
\[ min \ max\ L(w,b,\alpha) \ge max \ min \ L(w,b,\alpha) \]
強對偶關係:若等號存在,則爲強對偶。【\(SVM\) 天生知足強對偶條件】
故這裏極小極大等價於極大極小。
容許分類存在一點點的錯誤
然而,\(l_{0/1}\)非凸、非連續、數學性質很差,不容易直接求解,因而用其他的函數來替代\(l_{0/1}\),稱爲「替代損失」(surrogate loss)。替代損失函數具備較好的額數學性質,一般凸的連續函數且是\(l_{0/1}\)的上界。西瓜書提供了三種經常使用的替代損失函數:
\(Loss:\)hinge損失函數(見上圖)
根據距離的遠近設置損失函數。
\[ \left\{ \begin{array}{l} y_i(w^Tx_i+b)\ge1\\ y_i(w^Tx_i+b) <1\\ \end{array} \right. \begin{array}{l} Loss =0\\ Loss =1-y_i(w^Tx_i+b)\\ \end{array} \]
能夠發現上面的公式,就是\(hinge\)損失嘛!
\[ Loss = max \{0,1-y_i(w^Tx_i+b\} \]
若採用的是hinge損失:
\[ min \frac{1}{2}w^Tw+C\cdot loss = min \frac{1}{2}w^Tw+ C \cdot max \{0,1-y_i(w^Tx_i+b\} \]
通常咱們不用上述合頁損失的公式。
令\(\xi_i=1-y_i(w^Tx_i+b)\),故可有\(\xi_i\ge 0\)
最終能夠推出:
\[ \Rightarrow min \frac{1}{2}w^Tw+ C\sum_{i=1}^n \xi(i)\\ s.t.y_i(w^Tx_i+b)\ge1-\xi(i),i=1,2,\dots,n \\ s.t.\ \xi_i \ge 0 \]
拉格朗日乘子法:
\[ \begin{aligned} L(\boldsymbol{w}, b, \boldsymbol{\alpha}, \boldsymbol{\xi}, \boldsymbol{\mu})=& \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i} \\ &+\sum_{i=1}^{m} \alpha_{i}\left(1-\xi_{i}-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right)-\sum_{i=1}^{m} \mu_{i} \xi_{i} \end{aligned} \]
其中,\(\alpha_i\ge0,\mu_i\ge0\)是拉格朗日乘子。
直接求偏導:
\[ \begin{aligned} \boldsymbol{w} &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ 0 &=\sum_{i=1}^{m} \alpha_{i} y_{i} \\ C &=\alpha_{i}+\mu_{i} \end{aligned} \]
得對偶問題(dual problem):
\[ \begin{array}{cl}{\max _{\alpha}} & {\sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}} \\ {\text { s.t. }} & {\sum_{i=1}^{m} \alpha_{i} y_{i}=0} \\ {} & {0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \ldots, m}\end{array} \]
與硬間隔的區別是對偶變量的約束不一樣:前者\(0 \leqslant \alpha_{i} \leqslant C\),後者是\(0 \leqslant \alpha_{i}\)
KKT條件:
\[ \left\{\begin{array}{l}{C\geqslant\alpha_{i} \geqslant 0, \quad \mu_{i} \geqslant 0} \\ {y_{i} f\left(x_{i}\right)-1+\xi_{i} \geqslant 0} \\ {\alpha_{i}\left(y_{i} f\left(x_{i}\right)-1+\xi_{i}\right)=0} \\ {\xi_{i} \geqslant 0, \mu_{i} \xi_{i}=0}\end{array}\right. \]
根據以前已經獲得的公式:
\[ \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned} \]
模型取決於\(w\),進一步取決於\(\alpha_i\)
能夠通過如下四種分析:
當\(\alpha_i>0\)時,\(y_{i} f\left(x_{i}\right)-1+\xi_{i}\)必爲零,說明邊界上的權重不爲零,即模型建模主要卻決與支持向量。
當\(\alpha_i<C\)時,\(\mu_i\)必大於零【根據公式:\(C=\alpha_i+\mu_i\)】,進一步必有\(\xi_i=0\)。即樣本就在最大分類邊界上。
總結對於支持向量的結論:
如今的問題就是,假設C=0,這種margin擴展,就是在以前的邊界上平行遠離嗎?
若使用對率損失函數來替代0/1損失,幾乎能夠獲得對率迴歸模型(Logisitc迴歸)
其優勢:
1. 輸出具備天然機率意義。
2. 可用於處理多分類任務
而SVM的輸出不具有機率意義且多分類任務須要推廣。對率損失是光滑的單調遞減函數,SVM的解要求具備稀疏性,hinge有一塊平坦的區域能夠知足這個條件。而若須要用對率迴歸則須要更多的訓練樣本,開銷大【這部分理解的不是很好,可是是西瓜書的內容,就記在這把!】
【我對這句話的理解】:
對hinge損失求導,必定是一個常數。
\[ \begin{aligned} L(\boldsymbol{w}, b, \boldsymbol{\alpha}, \boldsymbol{\xi}, \boldsymbol{\mu})=& \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{m} \xi_{i} \\ &+\sum_{i=1}^{m} \alpha_{i}\left(1-\xi_{i}-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right)-\sum_{i=1}^{m} \mu_{i} \xi_{i} \end{aligned} \]
\[ \nabla _{\xi \left( i \right)}L=C-\alpha _i-\mu _i=0 \]
將相近的點映射到一個空間,將遠的點分到另外一個空間
核函數的訣竅在於解決了映射後高維空間中樣本距離\(\left\|\Phi\left(x_{i}\right)-\Phi\left(x_{j}\right)\right\|\)的計算,但又不顯式地展現出映射函數\(\Phi(\cdot)\)。
一般表示爲:
\[ \kappa\left(x_{1}, x_{2}\right)=<\Phi\left(x_{1}\right), \Phi\left(x_{2}\right)> \]
從而有:
\[ \begin{aligned}\left\|\Phi\left(x_{i}\right)-\Phi\left(x_{j}\right)\right\|^{2} &=<\Phi\left(x_{1}\right)-\Phi\left(x_{2}\right), \Phi\left(x_{1}\right)-\Phi\left(x_{2}\right)>\\ &=<\Phi\left(x_{1}\right), \Phi\left(x_{1}\right)>-2<\Phi\left(x_{1}\right), \Phi\left(x_{2}\right)>+<\Phi\left(x_{2}\right), \Phi\left(x_{2}\right)>\\ &=\kappa\left(x_{1}, x_{1}\right)-2 \kappa\left(x_{1}, x_{2}\right)+\kappa\left(x_{2}, x_{2}\right) \end{aligned} \]
取\(\kappa(x, z)=<x, z>^{2}\),這裏\(x=(x_1,x_2)\),\(z=(z_1,z_2)^T \in R^2\)故有;
\[ \begin{aligned} \kappa(x, z) &=<x, z>^{2} \\ &=\left(x_{1} z_{1}+x_{2} z_{2}\right)^{2} \\ &=\left(x_{1} z_{1}\right)^{2}+2 x_{1} x_{2} z_{1} z_{2}+\left(x_{2} z_{2}\right)^{2} \end{aligned} \]
取\(\Phi(x)=\left(x_{1}^{2}, x_{1} x_{2}, x_{2}^{2}\right)\).則有成\(\kappa(x, z)=<\Phi(x), \Phi(z)>\)成立。也就是說此時映射函數將二維特徵空間\(\left(\begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right)\)映射成了三維空間\(\left(\begin{array}{l}{x_{1}^{2}} \\ {x_{1} x_{2}} \\ {x_{2}^{2}}\end{array}\right)\) \(\Phi: R^{2} \rightarrow R^{3}\)。
\[ \kappa(x, z)=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) \]
指數泰勒展開:
\[ e^{x}=1+\frac{x}{1 !}+\frac{x^{2}}{2 !}+\frac{x^{3}}{3 !}+\ldots=\sum_{n=0}^{\infty} \frac{x^{n}}{n !} \]
根據泰勒級數,展開高斯核:
\[ \begin{aligned} \kappa(x, z) &=\exp \left(-\frac{\|x-z\|^{2}}{2 \sigma^{2}}\right) \\ &=\exp \left[-\frac{1}{2 \sigma^{2}}<x-z, x-z>\right] \\ &=\exp \left[-\frac{1}{2 \sigma^{2}}\left(\|x\|^{2}+\|z\|^{2}-2 x^{T} z\right)\right] \\ &=\exp \left(\gamma\|x\|^{2}\right) * \exp \left(\gamma\|z\|^{2}\right) * \exp \left(-2 \gamma x^{T} z\right), \gamma=-\frac{1}{2 \sigma^{2}} \end{aligned} \]
其中指數部分根據泰勒展開:
\[ \begin{aligned} \exp \left(\gamma\|x\|^{2}\right) &=\sum_{n=0}^{\infty} \frac{\left(\gamma\|x\|^{2}\right)^{n}}{n !} \\ &=\sum_{n=0}^{\infty} \frac{\gamma^{n\left(x_{1}^{2}+x_{2}^{2}+\ldots x_{k}^{2}\right)^{n}}}{n !}, x=\left(x_{1}, x_{2} \cdots x_{k}\right)^{T} \end{aligned} \]
K 是有限數,指數能夠映射爲無限維空間。
也就是說,\(\exp \left(\gamma\|x\|^{2}\right)\)含有了無窮多項的多項式,對應的映射函數\(\Phi(\cdot)\)將k維空間映射成了無限維空間,即::\(\Phi: R^{k} \rightarrow R^{\infty}\)。
區分:\(\gamma\)
\[ \gamma=-\frac{1}{2 \sigma^{2}} \]
\[ \sigma \rightarrow 0,-\frac{\|x-z\|^{2}}{2 \sigma^{2}} \rightarrow-\infty, \kappa(x, z) \rightarrow 0 \]
\[ |\Phi(x)-\Phi(z)|^{2}=\kappa(x, x)-2 \kappa(x, z)+\kappa(z, z)=2-2 \kappa(x, z)=2 \]
兩個相同的點高斯核爲1,不一樣點的高斯核爲0,推出不一樣的點映射後距離都爲()故不存在聚類,自成一類。
\[ \sigma \rightarrow \infty,-\frac{\|x-z\|^{2}}{2 \sigma^{2}} \rightarrow 0, \kappa(x, z) \rightarrow 1 \]
\[ |\Phi(x)-\Phi(z)|^{2}=\kappa(x, x)-2 \kappa(x, z)+\kappa(z, z)=2-2 \kappa(x, z)=0 \]
不一樣點的高斯核爲1,推出:不一樣點映射後得距離都爲0,故聚類爲一點。
綜上: 參數\(\sigma\)越小,分的類別會越細,也就是說越容易致使過擬合;參數\(\sigma\)越大,分的類別會越粗,致使沒法將數據區分開來。