之前一篇文章《Andrew機器學習課程筆記(3)—— K均值、SVM、PCA》有分析過SVM,但感覺不夠系統,也沒有算法落地
本篇及下一篇從“概念及推導”和“算法實現”兩個方面討論SVM
本篇包含:SVM基本概念、線性可分SVM、非線性可分SVM、帶有鬆弛變量的SVM
概念
支持向量機(SVM)是一種二類分類模型,其基本目標是找到一個分類平面,使得兩邊的特徵點與之距離(margin)最大。
圖1-1. 二維空間線性SVM
圖1-1中落在藍色邊界的樣本稱爲支撐向量
對於非線性可分的情況,SVM通過引入核函數,將樣本映射到高維空間實現分類。
SVM一直被認爲是效果最好的現成可用的分類算法之一
線性可分SVM
目標函數推導
考慮線性分類器的超平面方程
使用sign的激活函數
由此可以得到樣本點到分類面的函數間隔(functional margin)
乘上y可以保證間隔的非負性
同時,由點面距離可以得到幾何間隔(geometrical margin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
幾何間隔的推導
參考文章《支持向量機: Maximum Margin Classifier》的評論
令
等式(5)兩邊左乘
又因爲
而
於是有
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
可以看到,幾何間隔較函數間隔多了一個縮放因子
由此確定 SVM 的目標函數
爲了計算方便,固定
目標函數求解
爲了方便,將SVM目標函數(7)做等價變形
根據拉格朗日乘子法,(8)式可以變爲求(9)式的極值
對
令各偏導爲0,得
這裏
事實上我們將式(11)中的
也就是說,對於新點
此外,非支持向量點對應的
非線性可分SVM
參考文章《支持向量機: Kernel》,考慮如圖2-1所示的數據分佈
圖2-1. 兩類數據無法用線性分類器分類
圖1-2理想的分類面爲
爲了實現線性可分,可以將2維數據映射到5維:
於是有線性形式
因此對於非線性可分的情況,理論上首先將數據做適當升維即可(對比式(12))
但這樣一來會遇到“維數爆炸”的問題(高斯核會將數據升到無窮維),導致計算量急劇升高
SVM核函數的做法是:在原始維度以某種函數做運算,確保與升維內積一個效果
常用的核函數:
- 多項式核
K(x1,x2)=(<x1,x2>+R)d
2 維度映射Rm−>Rm+d - 高斯核
K(x1,x2)=e−||x1−x2||22σ2
2 維度映射Rm−>∞ ,
- 如果
σ 很大,高次特徵的權重衰減的很快,近似於映射到一個低維空間 - 如果
σ 很小,則可以將任意數據映射爲線性可分。但有可能出現過擬合問題 - 因此通過調節
σ ,高斯核具有相當高的靈活性。是使用最廣泛的核函數之一
- 如果
- 線性核
K(x1,x2)=<x1,x2>
退化爲線性SVM
帶有鬆弛變量的SVM
由於不可避免的噪聲,有些數據會偏離正常位置很遠,給SVM分類平面帶來很大影響(圖3-1)
圖3-1. 被黑圈包圍的藍點是異常點(outlier),需要被排除
如式(17)所示,引入一個鬆弛變量
參考
【1】Free Mind 支持向量機系列
【2】支持向量機(Support Vector Machines-SVM)算法筆記(一)-Python