支持向量機(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
函數:優化
記$ 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 $,將使得咱們的決策邊界呈現出以下黑色實線:
上圖的綠色實線看起來也是能夠分割樣本的,可是明顯不如黑色實線好,那是由於,黑色實線距離樣本的間距(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) $二維平面的點,這個點距離某個參考點的高斯核函數具備以下相似圖像:
這個凸面上的點的高度就是函數的值,當$ (x_1, x_2) $接近參考點時,函數值越接近1,反正越趨向於0。
高斯核函數有個參數σ
,當σ
越大,凸面更平緩,意味着咱們對兩個點距離的相近度越寬容
;當σ
越小,凸面更尖銳,意味着咱們對兩個點距離的相近度越嚴苛
。
一種選取參考點的方法是,將每個樣本都做爲參考點。當樣本數爲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的模型時,不建議本身編寫SVM的實現,由於成熟的庫一般效率更好。在應用SVM時,你須要做以下決策: