機器學習公開課筆記(7):支持向量機


支持向量機(Support Vector Machine, SVM)

考慮logistic回歸,對於$y=1$的數據,我們希望其$h_\theta(x) \approx 1$,相應的$\theta^Tx \gg 0$; 對於$y=0$的數據,我們希望$h_\theta(x) \approx 0$,相應的$\theta^Tx \ll 0$。每個數據點的代價為: $$-\left[y\log(h_\theta(x))+(1-y)\log(1-h\theta(x))\right]$$當$y=1$時其代價$cost_1(z)=-\log(\frac{1}{1+e^{-z}})$;當$y=0$時其代價$cost_0(z)=-\log(1-\frac{1}{1+e^{-z}})$,分別如圖1左右所示。

圖1 當$y=1$和$y=0$單個數據點的代價隨$z$的變化

logistic回歸的假設為$$\min\limits_\theta \frac{1}{m}\left[\sum\limits_{i=1}^{m}y^{(i)}(-\log(h_\theta(x^{(i)}))) + (1-y^{(i)})(-\log(1-h_\theta(x^{(i)})))\right] + \frac{\lambda}{2m}\sum\limits_{j=1}^{n}\theta_{j}^2$$通過去掉$\frac{1}{m}$並且將$A+\lambda B$的形式變為$CA+B$的形式,可以得到SVM的假設為$$\min\limits_\theta C\left[\sum\limits_{i=1}^{m}y^{(i)}cost_1(\theta^Tx^{(i)}) + (1-y^{(i)})cost_0(\theta^Tx^{(i)})\right] + \frac{1}{2}\sum\limits_{j=1}^{n}\theta_{j}^2$$

最大間隔(Large Margin Intuition)

對於$y=1$的數據,我們希望$\theta^Tx \ge 1$而不僅僅是$\ge 0$; 對於$y=0$的數據,我們希望$h_\theta(x) \leq -1$而不僅僅是$< 0$。當C很大時,由於$CA+B$要取最小值,因此$A\approx 0$,從而SVM最大化間隔問題變為\begin{align*}&\min\limits_\theta\frac{1}{2}\sum\limits_{j=1}^{n}\theta_j^{2}\\ &s.t.\quad\begin{cases}\theta^{T}x^{(i)}\geq 1 \quad y^{(i)}=1\\\theta^{T}x^{(i)}\leq -1 \quad y^{(i)}=0\end{cases}\end{align*}

圖2 支持向量機最優超平面和最大Margin(兩條虛線之間的距離),支撐向量指的是位於兩條虛線上的點(在高維空間中,每個點可以看作是從原點出發的向量,所以這些點也稱為向量)

參數C表示對錯誤的容忍程度,C值越大表示越不能容忍錯誤分類,容易出現過擬合現象(如圖3所示).


圖3 參數C對分類的影響,C越大越不能容忍錯誤分類;反之能夠接受少量錯誤分類.

Kernel

對於低維空間中線性不可分的情況,可以通過增加高階多項式項將其映射到高維空間,使得在高維空間中通過一個超平面可分(如圖4所示)。Kernel解決如何選擇合適的高維特征問題,對於任意低維數據點x,定義它與低維空間中預先選定的標記點$l^{(i)}$(landmarks)之間的相似性為$$f_i=similarity(x, l^{(i)})=exp\left(-\frac{||x-l^{(i)}||^2}{2\sigma^2}\right)$$這樣當有k個landmarks時,我們將得到k個新的特征$f_i$,這樣就將低維空間的點x投射為高維(k維)空間中一個點。如果x距離$l^{(i)}$非常近,即$x\approx l^{(i)}$, 則相似性$f_i\approx 1$; 否則如果x距離$l^{(i)}$非常遠,則相似性$f_i\approx 0$。接下來一個問題是如何選擇landmarks,一種做法是選擇所有的m個樣本點作為landmarks,這樣對於具有n個特征的數據點$x^{(i)}$,通過計算$f_i$,將得到一個具有m維空間的數據點$f^{(i)}$。


圖4 通過kernel函數將低維線性不可分數據投射到高維空間從而使得線性可分. 

 

SVM with kernels

假設(Hypothesis):給定數據點$x$,計算新的特征$f$。當$\theta^Tf \geq 0$時,預測$y=1$;反之,預測$y=0$。

訓練(Training):$$\min\limits_\theta C\left[\sum\limits_{i=1}^{m}y^{(i)}cost_1(\theta^Tf^{(i)}) + (1-y^{(i)})cost_0(\theta^Tf^{(i)})\right] + \frac{1}{2}\sum\limits_{j=1}^{n}\theta_{j}^2$$

參數C($\approx\frac{1}{\lambda}$)的影響:

  • large C: low bias, high variance
  • small C: high bias, low variance

參數$\sigma^2$的影響:

  • large $\sigma^2$:high bias, low variance ($f_i$ vary more smoothly)
  • small $\sigma^2$:low bias, high variance ($f_i$ vary less smoothly)

支持向量機實踐

實際應用中不會要求自己實現SVM,更多是調用線程的庫例如liblinear,libsvm等來求解。需要指定參數C和kernel函數。

Linear kernel: 不指定kernel,即“No kernel”,也稱為“linear kernel”(用於特征n較大,同時example數m較小時).

Gaussian kernel: $f_i=exp\left(-\frac{||x-l^{(i)}||^2}{2\sigma^2}\right)$,其中$l^{(i)}=x^{(i)}$,需要指定參數$\sigma^2$(用於n較小,m較大時)。注意在使用Gaussian kernel之前需要對數據進行feature scaling.

其他常見的kernel包括

  • Polynomal kernel:$k(x, l) = (\alpha x^Tl+c)^{d}$,其中可調節參數包括坡度$\alpha$,常量$c$和多項式度$d$
  • string kernel: 對字符串直接進行變換,不需要將字符串數值化,具體公式見wikipedia:string kernel
  • chi-square kernel:$k(x, y)=1-\sum\limits_{k=1}^{n}\frac{(x_k-y_k)^2}{\frac{1}{2}(x_k+y_k)}$
  • histogram intersection kernel:$k(x, y) = \sum\limits_{k=1}^{n}\min(x_k, y_k)$

 多元分類:采用one-vs-all的方法,對於k個分類,需要訓練k個svm.

logistic回歸和SVM

當n較大時($n\geq m$, n=10000, m = 1000),使用logistic回歸或者SVM(with linear kernel)

當n較小,m中等時(n=10-1000, m = 10-100000),使用SVM(with Gaussian kernel)

當n較小, m較大時(n=1-1000, m = 500000),增加新的特征,然后適用logistic回歸或者SVM(with linear kernel)

神經網絡在各類n, m情況下都工作的很好,缺陷是訓練速度比較慢

參考文獻

[1] Andrew Ng Coursera 公開課第七周

[2] Kernel Functions for Machine Learning Applications. http://crsouza.com/2010/03/kernel-functions-for-machine-learning-applications/#chisquare

[3] Wikipedia: string kernel. https://en.wikipedia.org/wiki/String_kernel

[4] Hofmann T, Schölkopf B, Smola A J. Kernel methods in machine learning[J]. The annals of statistics, 2008: 1171-1220.


免責聲明!

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



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