1、SVM主要解决什么问题
SVM的全称是Support Vector Machine,即支持向量机,
主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。
SVM要解决的问题可以用一个经典的二分类问题加以描述。
如上图所示,红色和蓝色的二维数据点显然是可以被一条直线分开的,在模式识别领域称为线性可分问题。
然而将两类数据点分开的直线显然不止一条。图1(b)和©分别给出了A、B两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。
每个决策面对应了一个线性分类器。虽然在目前的数据上看,这两个分类器的分类结果是一样的,但如果考虑潜在的其他数据,则两者的分类性能是有差别的。
SVM算法认为图1中的分类器A在性能上优于分类器B,其依据是A的分类间隔比B要大。
这里补充下——什么是分类间隔:
保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。
虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。
而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。
两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。
对于这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。
例如:上图中,A决策面就是SVM寻找的最优解,而相应的三个位于虚线上的样本点在坐标系中对应的向量就叫做支持向量。
在这里总结一下:
从表面上看,我们优化的对象似乎是这个决策面的方向和位置。
但实际上最优决策面的方向和位置完全取决于选择哪些样本作为支持向量。
而在经过漫长的公式推导后,你最终会发现,其实与线性决策面的方向和位置直接相关的参数都会被约减掉,最终结果只取决于样本点的选择结果。
2、线性SVM算法的数学建模
一个最优化问题通常有两个最基本的因素:
1)目标函数,也就是你希望什么东西的什么指标达到最好;
2)优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。
在线性SVM算法中,目标函数显然就是那个**“分类间隔”,而优化对象则是决策面**。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔”和“决策面”)进行数学描述。按照一般的思维习惯,我们先描述决策面。
2.1 决策面方程
先不要纠结于n维空间中的n-1维超平面这种超出正常人想象力的情景。
我们就老老实实地看看二维空间中的一根直线,我们从初中就开始学习的直线方程形式很简单。
y = a x + b y=ax+b y=ax+b (2.1)
现在我们做个小小的改变,让原来的 x x x轴变成 x 1 x_1 x1轴, y y y变成 x 2 x_2 x2轴,于是公式(2.1)中的直线方程会变成下面的样子
公式(2.3)的向量形式可以写成
考虑到我们在等式两边乘上任何实数都不会改变等式的成立,所以我们可以写出一个更加一般的向量表达形式:
看到变量 w , x w,x w,x略显粗壮的身体了吗?
他们是黑体,表示变量是个向量,表示变量是个向量,[一般我们提到向量的时候,都默认他们是个列向量。
就着公式(2.5),我们再稍稍尝试深入一点。那就是探寻一下向量 w = [ w 1 , w 2 ] T w=[w_1,w_2]^T w=[w1,w2]