1. 程式人生 > >支援向量機(SVM)演算法

支援向量機(SVM)演算法

1. 背景:

 1.1 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出
 1.2 目前的版本(soft margin)是由Corinna Cortes 和 Vapnik在1993年提出,並在1995年發表
 1.3 深度學習(2012)出現之前,SVM被認為機器學習中近十幾年來最成功,表現最好的演算法.是最好的現成的分類器,‘現成’指的是分類器不加修改就可以直接使用。同時這就意味著在資料上應用基本形式的SVM分類器就可以得到低錯誤率的效果。SVM能夠對訓練集之外的資料點作出很好的分類決策。

2. 機器學習的一般框架:

 訓練集 => 提取特徵向量 => 結合一定的演算法(分類器:比如決策樹,KNN)=>得到結果

3. 介紹:

 3.1 例子:

這裡寫圖片描述

將上圖黑點與白點用超平面(這裡可以認為就是一條直線)分開,但是哪條直線更好呢?

3.2 SVM尋找區分兩類的超平面(hyper plane), 使邊際(margin)最大

這裡寫圖片描述

 總共可以有多少個可能的超平面?無數條
 如何選取使邊際(margin)最大的超平面 (Max Margin Hyperplane)?
 超平面到一側最近點的距離等於到另一側最近點的距離,兩側的兩個超平面平行

3. 線性可區分(linear separable) 和 線性不可區分 (linear inseparable)
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

4. 定義與公式建立

超平面可以定義為:這裡寫圖片描述


W: weight vectot, 這裡寫圖片描述 , n 是特徵值的個數
X: 訓練例項
b: bias
這裡寫圖片描述
4.1 假設2維特徵向量:X = (x1, X2)
把 b 想象為額外的 wight
超平面方程變為: 這裡寫圖片描述
所有超平面右上方的點滿足:這裡寫圖片描述
所有超平面左下方的點滿足:這裡寫圖片描述
調整weight,使超平面定義邊際的兩邊:這裡寫圖片描述
綜合以上兩式,得到:這裡寫圖片描述 (1)
所有坐落在邊際的兩邊的的超平面上的被稱作”支援向量(support vectors)”
分界的超平面和H1或H2上任意一點的距離為 這裡寫圖片描述
(i.e.: 其中||W||是向量的範數(norm))這裡寫圖片描述
所以,最大邊際距離為:這裡寫圖片描述

5. 求解

5.1 SVM如何找出最大邊際的超平面呢(MMH)?

利用一些數學推倒,以上公式 (1)可變為有限制的凸優化問題(convex quadratic optimization)利用 Karush-Kuhn-Tucker (KKT)條件和拉格朗日公式,可以推出MMH可以被表示為以下“決定邊界 (decision boundary)” 這裡寫圖片描述
其中:
{y_i} 是支援向量點{X_i} (support vector)的類別標記(class label){X^T}是要測試的例項
{\alpha _i} 和 {b_0} 都是單一數值型引數,由以上提到的最有演算法得出l 是支援向量點的個數

5.2 對於任何測試(要歸類的)例項,帶入以上公式,得出的符號是正還是負決定

6. 例子:

這裡寫圖片描述
這裡寫圖片描述

7.SVM的特性

1.1 訓練好的模型的演算法複雜度是由支援向量的個數決定的,而不是由資料的維度決定的。所以SVM不太容易產生overfitting
1.2 SVM訓練出來的模型完全依賴於支援向量(Support Vectors), 即使訓練集裡面所有非支援向量的點都被去除,重複訓練過程,結果仍然會得到完全一樣的模型。
1.3 一個SVM如果訓練得出的支援向量個數比較小,SVM訓練出的模型比較容易被泛化。
其實總結下來如下:
優點:泛化錯誤低,計算開銷不大,結果容易理解。
缺點:對引數調節和核函式的選擇敏感,原始分類器不加修改僅適用於處理二分類問題。
適用資料型別:數值型和標稱型資料。

2. 線性不可分的情況 (linearly inseparable case)

2.1 資料集在空間中對應的向量不可被一個超平面區分開

這裡寫圖片描述

2.2 兩個步驟來解決:
2.2.1 利用一個非線性的對映把原資料集中的向量點轉化到一個更高維度的空間中
2.2.2 在這個高維度的空間中找一個線性的超平面來根據線性可分的情況處理
2.2.3 視覺化演示 https://www.youtube.com/watch?v=3liCbRZPrZA

2.3 如何利用非線性對映把原始資料轉化到高維中?
2.3.1 例子:
3維輸入向量:這裡寫圖片描述
轉化到6維空間 Z 中去: 這裡寫圖片描述這裡寫圖片描述
新的決策超平面:這裡寫圖片描述 其中W和Z是向量,這個超平面是線性的解出W和b之後,並且帶入回原方程:這裡寫圖片描述

2.3.2 思考問題:

2.3.2.1: 如何選擇合理的非線性轉化把資料轉到高緯度中?
2.3.2.2: 如何解決計算內積時演算法複雜度非常高的問題?

2.3.3 使用核方法(kernel trick)
3. 核方法(kernel trick)
3.1 動機
線上性SVM中轉化為最優化問題時求解的公式計算都是以內積(dot product)的形式出現的這裡寫圖片描述,其中 這裡寫圖片描述是把訓練集中的向量點轉化到高維的非線性對映函式,因為內積的演算法複雜 度非常大,所以我們利用核函式來取代計算非線性對映函式的內積

3.1 以下核函式和非線性對映函式的內積等同
這裡寫圖片描述

3.2 常用的核函式(kernel functions)

  • h度多項式核函式(polynomial kernel of degree h): 這裡寫圖片描述
  • 高斯徑向基核函式(Gaussian radial basis function kernel): 這裡寫圖片描述

  • S型核函式(Sigmoid function kernel): 這裡寫圖片描述

    如何選擇使用哪個kernel?

    根據先驗知識,比如影象分類,通常使用RBF,文字不使用RBF
    嘗試不同的kernel,根據結果準確度而定

3.3 核函式舉例:
假設定義兩個向量: x = (x1, x2, x3); y = (y1, y2, y3)
定義方程:f(x) = (x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3)

  K(x, y ) = (<x, y>)^2

  假設x = (1, 2, 3); y = (4, 5, 6).
        f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9)
        f(y) = (16, 20, 24, 20, 25, 36, 24, 30, 36)
        <f(x), f(y)> = 16 + 40 + 72 + 40 + 100+ 180 + 72 + 180 + 324 = 1024

       K(x, y) = (4  + 10 + 18 ) ^2 = 32^2 = 1024
       同樣的結果,使用kernel方法計算容易很多

4. SVM擴充套件可解決多個類別分類問題
對於每個類,有一個當前類和其他類的二類分類器(one-vs-rest)