原始的SVM早在1963年就被发明了,但直到1992年才发明了核方法,使得SVM可以用于非线性分类。
SVM的应用:
handwritten character recognition手写字符识别
face detection 人脸检测
pedestrian detection行人检测
text categorization 文本分类
SVM把训练样本都看作高维空间的点,找一个超平面,使得两类样本尽可能宽地分开。新来的测试样本被映射到同一个空间,看它在hyperlane的哪一侧就能线性二分类。
Note: p维空间是用p-1维的Hyperlane分隔开的。
SVM,顾名思义,支持向量是对于求解学习模型的关键(实际上SVM最终的模型只和支持向量有关,和其他的数据点向量无关),所以问题求解的复杂度直接和支持向量的个数有关。所以先说两个重点基础概念——margin & support vector。
(一) 间隔和支持向量
SVM(Support Vector Machine)的思想和其他线性模型做2分类一样,都是找个超平面(hyperplan)然后一刀切。但SVM这么成功(在90年代直接造成了NN的第二冬),自然有其独到之处,那就是在超平面的概念上,多引入了“间隔”和"支持向量"的概念。
可实现分类的超平面不唯一,我们怎么选择一个更好的超平面呢?直观上,应该是去找位于两类样本的“正中间”的那个。
超平面的方程:
w T x + b = 0 w^Tx+b=0 wTx+b=0
w w w是法向量,他的方向与超平面正交,决定超平面的方向 ;
b是位移项,决定超平面和原点的距离。
这俩参数完全决定了超平面,所以就直接把超平面记为 ( w , b ) (w,b) (w,b)。
(实际上最小二乘回归,逻辑回归好不容易求解出来的线性模型也是个超平面,LDA最后求出来的是个过原点的超平面,b=0)
超平面建模完毕,那么空间中任意一点到它的距离:
r = w T x + b ∣ ∣ w ∣ ∣ r=\frac{w^Tx+b}{||w||} r=∣∣w∣∣wTx+b
不明白可以以二维为例,二维空间的对应的划分超平面是一条直线 w 1 x 1 + w 2 x 2 + b = 0 w_1x_1+w_2x_2+b=0 w1x1+w2x2+b=0,点到直线的距离公式为 d = ∣ A x + B y + C ∣ A 2 + B 2 d=\frac{|Ax+By+C|}{\sqrt{A^2+B^2}} d=A2+B2∣Ax+By+C∣,则点到超平面的距离为 r = ∣ w 1 x 1 + w 2 x 2 + b ∣ w 1 2 + w 2 2 r=\frac{|w_1x_1+w_2x_2+b|}{\sqrt{w_1^2+w_2^2}} r=w12+w22∣w1x1+w2x2+b∣,推广到高维就明白上式了。
可正确分类的超平面满足:
(1) { w T x i + b > 0 , y i = + 1 w T x i + b < 0 , y i = − 1 \left\{ \begin{aligned} w^Tx_i+b>0&,&y_i=+1\\ w^Tx_i+b<0&,&y_i=-1 \end{aligned} \right. \tag1 {
wTxi+b>0wTxi+b<0,,yi=+1yi=−1(1)
but! 我们现在不仅要正确分类,而且要提出更高的标准,要留有“裕量”,即“间隔”:
(2) { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 \left\{ \begin{aligned} w^Tx_i+b\geq+1&,&y_i=+1\\ w^Tx_i+b\leq-1&,&y_i=-1 \end{aligned} \right. \tag 2 {
wTxi+b≥+1wTxi+b≤−1,,yi=+1yi=−1(2)
支持向量support vector:使(2)中不等式的等号成立的那些距离超平面最近的那几个训练样本点。
间隔margin:两个异类支持