機器學習-SVM支持向量機【精美排版、通俗易讀】

語言: CN / TW / HK

一起養成寫作習慣!這是我參與「掘金日新計劃 · 4 月更文挑戰」的第11天,點擊查看活動詳情

支持向量機

支持向量機(Support Vector Machine, SVM)是一種非常強大的監督學習算法 ,廣泛應用於學術界和工業界,在學習複雜的非線性方程時提供了一種更為清晰的方法。

SVM 的優化目標

每個算法的關鍵都是優化目標——即代價函數的定義。

從邏輯迴歸引入 SVM

邏輯迴歸的激活函數

邏輯迴歸的激活函數如下(該激活函數同樣也是邏輯迴歸的假設函數):

$$ h_{\theta}(x)=\frac{1}{1+e^{-\theta^Tx}} =g(z)=\frac{1}{1+e^{-z}} $$

觀察上面的函數,可以得出如下結論:

  • 若$y=1$,要使$h_\theta(x)\approx 1$,則$\theta^Tx\gg 0$
  • 若$y=1$,要使$h_\theta(x)\approx 0$,則$\theta^Tx\ll 0$

邏輯迴歸的代價函數:

邏輯迴歸的代價函數為:

$$ J(\theta)=min_{\theta}\frac{1}{m}[\sum^{m}{i=1}y^{(i)}(-log(h\theta{x^{(i)})})+(1-y^{(i)})(-log(1-h_\theta(x^{(i)})))]+\frac{\lambda}{2m}\sum^n_{j=1}{\theta^2_j} $$

不考慮求和和正則化,只考慮單樣本的情況下,邏輯迴歸的代價函數為:

$$ J(\theta)=-(ylog(h_\theta(x))+(1-y)log(1-h_\theta(x))) $$

  • $y=1$(要使$\theta^Tx\gg0$),則代價函數為:

  • 若$y=0$(要使$\theta^Tx\ll0$),則代價函數為:

tips:牢記一點,我們優化的目的是使得代價函數最小,$y=1/0$時,$\theta^Tx\ll/\gg0$才能時代價函數最小

SVM 的代價函數

SVM 的代價函數為:

$$ J(\theta)=min_{\theta}C[\sum^{m}{i=1}y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})(cost_0(\theta^Tx^{(i)}))]+\frac{1}{2}\sum^n{j=1}{\theta^2_j} $$

SVM 的代價函數,非常類似於上面邏輯迴歸的代價函數,做了如下改動:

  • 將左邊的$-(ylog(h_\theta(x))$替換為 $cost_1(\theta^Tx)$,將右邊$-(1-y)log(1-h_\theta(x))$替換為$cost_0(\theta^Tx)$,這兩個函數圖像如圖(粉紅線):

  • 取消了求和的常數$m$,因為這並不影響代價函數求最小值
  • 將右邊的$\lambda$改為左邊的常數$C$,這樣設置參數更方便我們關注左邊項的優化 tips:可以簡單理解為移項,即$C=\frac{1}{\lambda}$

SVM 的假設函數

SVM 的假設函數並不會輸出概率,而是直觀地預測$y$的值是等於 0 還是等於 1,如下:

$$ h_{\theta }(x)=\begin{cases}1&\theta^{T} x\geqslant 0\ 0&\theta^{T} x<0\end{cases} $$

SVM 的決策邊界

支持向量機又被看做是大間距分類器,也就是説 SVM 的決策邊界是一種「大邊界」,再看一下 SVM 代價函數的圖像:

  • 若$y=1$,要使$\theta^Tx\geqslant1(不僅\geqslant 0)$
  • 若$y=0 $,要使$\theta^Tx\leqslant -1(不僅<0)$

可見,相比於邏輯迴歸分類中以 0 為界,SVM 對於分類有着更高的要求(以 1 / -1 為界),相當於在 SVM 中加入了一個安全的間距因子

舉例大邊界的含義

舉一個例子來形象的理解一下這個「大邊界」的含義,觀察下面這樣一個數據集:

很顯然存在很多條線可以將兩種樣本分割開來:

但我們往往認為中間那條黑線最為合適,為什麼呢?因為黑線距離兩側的正負樣本,有着更大的距離,這個距離稱為支持向量機的間距(margin) ,這也就是大邊距的含義。

參數對 SVM 的影響

上面的例子中,為方便理解 SVM,實際上我們設置常數$C$非常大($C=\frac{1}{\lambda}$,可以理解為$\lambda$非常小),可以實現最大間距地分離正負樣本。但這樣做,如果遇到了一些異常點(outlier) 的話,為保持最大間距地分離,可能我們的決策邊界會受到很大的影響(黑線變粉線)。

所以不要將$C$設置的太大,才能忽略掉一些異常點的影響,甚至當數據並不是線性可分的時候,也能得到更好的決策邊界。

  • C 較大時,相當於$\lambda$較小,可能會導致過擬合,高方差。
  • C 較小時,相當於$\lambda$較大,可能會導致低擬合,高偏差

*大邊界分類背後的數學原理

SVM 其實是一個很複雜的算法,理解 SVM 大分類背後的數學理解,才能更好的理解 SVM

內積概念的複習

數量積與向量積

我們通過向量內積的這些性質來嘗試理解支持向量機中的優化目標函數

決策邊界的數學原理

為方便理解,我們先假設數據集線性可分,即使得:

$$ s.t\begin{cases}\theta^{T} x\geqslant 1&y^{(i)}=1\ \theta^{T} x\leqslant -1&y^{(i)}=0\end{cases} $$

這樣的話,代價函數左邊的項就直接變為了 0,同時我們暫且不考慮$\theta_0$(假設為 0),這時的代價函數變為:

$$ min_\theta\frac{1}{2}\sum^n_{j=1}\theta^2_j $$

如果數據集是二維的,則有:

$$ min_\theta\frac{1}{2}\sum^n_{j=1}\theta^2_j=\frac{1}{2}\left( \sqrt{\theta^{2}{1} +\theta^{2}{2} } \right)^2 =\frac{1}{2}||\theta||^2 $$

tips:$||\theta||^2$是$\theta$的 L2 範數

通過上面內積的知識,可知:

$$ \theta^{T}x^{(i)}=\theta_1x^{(i)}_1+\theta_2x^{(i)}_2=p^{(i)}||\theta|| $$

將其寫入我們的優化目標函數:

$$ s.t\begin{cases}p^{(i)}||\theta||\leqslant1&y^{(i)}=1\ p^{(i)}||\theta||\leqslant-1&y^{(i)}=0\end{cases} $$

大間距分類的原理

tips:SVM 決策邊界超平面的公式為$\theta^Tx=0$,所以向量$\theta$與超平面正交(垂直)。

  • ⭕️ 和 ❌ 都看成是向量,實際上我們在找一個特殊的$\theta$向量,使得所有 ⭕️ 向量點乘$\theta$向量都$<0$;使得所有 ❌ 點乘$\theta$向量都$>0$(假設函數)。
  • 找到$\theta$向量後,當一個向量點乘$\theta$等於 0,也就是決策邊界(實際上從數學角度來也必然是這樣:$ax+by=0與(a,b)垂直$)。
  • SVM 更希望$\theta^Tx$大於/小於某個常數(比如 1/-1 而不是 0 ),這樣 ⭕️ 和 ❌ 在$\theta$向量上的投影就會更大,離決策邊界更遠,從而實現大間距分類。
  • 代價函數要求最小的$\theta$的範數(即長度),只有在最佳分類的情況下才能使得$\theta$的範數最小。
  • $\theta_0=0 $只不過決定了決策邊界通過原點,即使$\theta_0\neq 0$,以上結論依然可以推廣。

tips:SVM 利用約束條件,1.$\theta^Tx=0$(前提條件) 2.$min_\theta\frac{1}{2}||\theta||^2$(決定因素) 3. p 與模長關係(控制參數),來保持邊界與樣本的距離使函數更加合理。

核函數

其他學習資源

https://blog.csdn.net/v_JULY_v/article/details/7624837