機器學習從入門到XX(七):支持向量機

SVM

支持向量機(Support Vector Machine),是另外一個種監督學習算法,有時他更高效和強大。算法

回顧在邏輯迴歸中,咱們使用以下規則:數組

若是y=1,那麼$ h_\theta(x) \approx 1 $,進而$ Θ^Tx \gg 0 $
若是y=0,那麼$ h_\theta(x) \approx 0 $,進而$ Θ^Tx \ll 0 $app

邏輯迴歸的代價函數以下:函數

$$ \begin{align*}J(\theta) & = \frac{1}{m}\sum_{i=1}^m -y^{(i)} \log(h_\theta(x^{(i)})) - (1 - y^{(i)})\log(1 - h_\theta(x^{(i)}))\\ & = \frac{1}{m}\sum_{i=1}^m -y^{(i)} \log\Big(\dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big) - (1 - y^{(i)})\log\Big(1 - \dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big)\end{align*} $$學習

在SVM中,我麼試圖簡化log函數,成爲以下紫紅色的函數線,而這個函數的結果接近log函數:優化

clipboard.png

clipboard.png

記$ cost_1(z) $是y=1時的代價函數,$ cost_0(z) $是y=0時的代價函數。注意到在$ cost_1(z) $中當z > 1時,$ cost_1(z) = 0 $;在$ cost_0(z) $中當z < -1時,$ cost_0(z) = 0 $。因而SVM的代價函數表示以下:spa

$$ J(\theta) = \frac{1}{m} \sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) $$設計

加入正則項後:3d

$$ J(\theta) = \frac{1}{m} \sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) + \dfrac{\lambda}{2m}\sum_{j=1}^n \Theta^2_j $$code

因爲常數係數m,並不會影響最小化代價函數,能夠去掉;再記$ C = \frac{1}{λ} $,因而簡化以下:

$$ J(\theta) = C\sum_{i=1}^m y^{(i)} \ \text{cost}_1(\theta^Tx^{(i)}) + (1 - y^{(i)}) \ \text{cost}_0(\theta^Tx^{(i)}) + \dfrac{1}{2}\sum_{j=1}^n \Theta^2_j $$

若是想要增大正則項的比重(即下降擬合),咱們能夠減少C;反之,經過增大C能夠防止欠擬合。

大間距分類器

注意到,在SVM中:

若是y=1,那麼$ Θ^Tx \ge 1 $,而不是$ \ge 0 $
若是y=0,那麼$ Θ^Tx \le -1 $,而不是$ \le 0 $

如今若是咱們設置C爲很是大的一個數,那麼在最小化代價函數的過程當中,$ \Theta $會趨向於知足以下條件:

$$ \sum_{i=1}^m y^{(i)}\text{cost}_1(\Theta^Tx) + (1 - y^{(i)})\text{cost}_0(\Theta^Tx) = 0 $$

因而代價函數簡化爲:

$$ \begin{align*} J(\theta) = \frac{1}{2}\sum_{j=1}^n \Theta^2_j \end{align*} $$

同時受限於條件$ Θ^Tx \ge 1 $和$ Θ^Tx \le -1 $,將使得咱們的決策邊界呈現出以下黑色實線:

clipboard.png

上圖的綠色實線看起來也是能夠分割樣本的,可是明顯不如黑色實線好,那是由於,黑色實線距離樣本的間距(margin)更大。所以,直觀的看SVM是傾向於大間隔的分類器。

至於爲何SVM會傾向於選擇更大間距的決策邊界,這跟向量投影理論有關,這裏略過。

核函數

核函數幫助咱們基於SVM建立更復雜的非線性的分類器。

給定一個樣本x,把該樣本跟幾個參考點$ l^{(1)} $ $ l^{(2)} $ $ l^{(3)} $的類似度做爲新的特徵使用。這裏的類似度使用以下函數:

$$ f_i = similarity(x, l^{(i)}) = \exp(-\dfrac{||x - l^{(i)}||^2}{2\sigma^2}) $$

這個函數稱爲高斯核函數(Gaussian Kernal),這是核函數的一種。當x和某個l的距離很近的時候,函數結果趨向於1;反之,當x和某個l的距離很大時,趨近於0。

假設原始的x具備兩個特徵$ (x_1, x_2) $二維平面的點,這個點距離某個參考點的高斯核函數具備以下相似圖像:

clipboard.png

這個凸面上的點的高度就是函數的值,當$ (x_1, x_2) $接近參考點時,函數值越接近1,反正越趨向於0。

高斯核函數有個參數σ,當σ越大,凸面更平緩,意味着咱們對兩個點距離的相近度越寬容;當σ越小,凸面更尖銳,意味着咱們對兩個點距離的相近度越嚴苛

clipboard.png

一種選取參考點的方法是,將每個樣本都做爲參考點。當樣本數爲m時,參考點的數量也是m。因而對於參考點$ l^{(1)} $,需計算樣本中的每個點與其類似度:

$$ f_1 = similarity(x,l^{(1)}) = \exp(-\dfrac{\sum^n_{j=1}(x_j-l^{(1)})^2}{2\sigma^2}) $$

這樣咱們能夠計算出一組新的樣本$ f $,樣本數量爲m,而後使用$ f $代替$ x $使用SVM,最小化以下代價函數:

$$ \min_{\Theta} C \sum_{i=1}^m y^{(i)}\text{cost}_1(\Theta^Tf^{(i)}) + (1 - y^{(i)})\text{cost}_0(\theta^Tf^{(i)}) + \dfrac{1}{2}\sum_{j=1}^n \Theta^2_j $$

這種經過核函數來轉變樣本並做用在SVM算法中的方法,也能夠用於邏輯迴歸。不過SVM與核函數組合使用是通過優化的,所以,計算效率比其餘算法要高。

應用SVM

若是使用高斯核函數,那麼在SVM中,咱們須要調整的參數有兩個:

  • C: 至關於$ \dfrac{1}{\lambda} $,C越大越趨向於過擬合;C越小越趨向於欠擬合。
  • $ σ^2 $: 經過上面高斯核函數的圖,$ σ^2 $越大,距離敏感度越低,越容易產生誤判,因而越容易欠擬合;$ σ^2 $越小,距離敏感度越高,越不容易產生誤判,但越容易過擬合。

在設計SVM的模型時,不建議本身編寫SVM的實現,由於成熟的庫一般效率更好。在應用SVM時,你須要做以下決策:

  • 參數C
  • 使用何種核函數,或者不使用核函數
  • 對於高斯核函數,須要調整參數$ σ^2 $
  • 在使用高斯核函數前,需進行參數縮放,即歸一化
  • 若是樣本的特徵大於樣本的數量(n > m),建議使用邏輯迴歸,或者無核函數的SVM;若是樣本的特徵小於樣本的數量(n < m),可考慮高斯核函數+SVM;若是樣本特徵遠小於樣本數量,考慮手工添加特徵,並使用邏輯迴歸或無核函數的SVM。
相關文章
相關標籤/搜索