支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。在机器学习中,支持向量机(SVM,还支持矢量网络)是与相关的学习算法有关的监督学习模型,可以分析数据,识别模式,用于分类和回归分析。
选定sigmoid函数作为激励函数,当 y=1 y = 1 的时候,我们想要假设函数的值与实际的值相等,那么就要让假设函数的值为1,这个时候 z z 要远大于零才能满足条件,同理,当 y=0 y = 0 的时候, z z 远小于 0 0 才能满足条件。
还是用 z z 表示 θ θ 的转置 ∗X ∗ X ,当 y=1 y = 1 的时候,目标函数只有前一项起作用,得到左图,当 z z 增大的时候,z对应的值会变得非常小,对整个代价函数而言,影响也非常小,所以在逻辑回归中观察到正样本 y=1 y = 1 的时候,一般讲 z z 设置得非常大,因为,在代价函数中,这一项会变得非常小。紫红色的线条代表新的代价函数曲线,这里的线是直线,这样画出曲线在之后的优化问题当中非常有用,计算起来会比较方便。当 y=0 y = 0 的时候,只有第二项起作用,的到右图。这时候,样本的代价是代价函数的贡献,新的代价函数也是紫红色的线条。
上面的公式是我们在逻辑回归里面使用的加上了正则化参数之后代价函数的公式,首先要出去1/m项,在最小化问题当中,无论前面是否有 1m 1 m 这一项,我们得到的最优值都是一样的。对于逻辑回归,我们有
1.训练样本的代价,
2.正则化项,一般我们用正则化项来平衡整体的。若我们想要最小化 A A 加上正则化参数 λ∗B λ ∗ B ,A表示第一项, B B 表示第二项,保证正则化参数足够小,也是对于 B B 项而言,但对于支持向量机,将使用一个不同的参数 C C 替换 λ λ 来权衡这两项,改为 C∗A+B C ∗ A + B ,因此,在逻辑回归中,如果给定λ为一个非常大的值,那么也就是说给予 B B 更大的权重,对应于将 C C 设定为一个非常小的值,相应的将会给 B B 比 A A 更大的权重。这里就是用参数来决定是多考虑第一项还是多考虑第二项的优化。如果 C=1λ C = 1 λ ,那么两个优化目标的到相同的最优值 θ θ ,删掉 λ λ ,并且用 C C 来代替,就得到了在支持向量机中的整个优化目标函数,然后最小化这个函数,得到SVM学习到的参数 C C 。
当θ的转置 ∗X≥0 ∗ X ≥ 0 的时候假设函数预测为 1 1 ,其他情况下预测为 0 0 .这里支持向量机的假设有别于逻辑回归输出的概率。所以,学习参数θ就是支持向量机假设函数的形式。
支持向量机也叫最大间距分类器。上图左边的为 y=1 y = 1 的时候正样本的代价函数,右边的为 y=0 y = 0 的时候负样本的代价函数,横轴表示z。如果我有一个正样本, y=1 y = 1 ,只有在 z≥1 z ≥ 1 的时候,代价函数才为 0 0 。也就是说,如果我有一个正样本,我们会希望θ的转置 ∗X≥1 ∗ X ≥ 1 ,反之,如果 y=0 y = 0 ,代价函数只有在 z≤1 z ≤ 1 的时候函数值为 0 0 。但实际上,如果有一个正样本,只要z≥0的时候就能够把这个样本恰当分出来,负样本 z≤0 z ≤ 0 的时候就可以将负例正确分离,但是,支持向量机的要求却很高,不仅要能够正确分离正样本,即不仅要求 z>0 z > 0 ,而且要求 z z 的值比 0 0 大很多,比如 ≥1 ≥ 1 ,同理,分离负样本的时候,要求 z≤−1 z ≤ − 1 .这就相当于在支持向量机里面嵌入了一个额外的安全因子。
当我们把 C C 设置地非常大的时候,将代价函数最小化时,我们可以很快找到一个使得第一项为 0 0 的最优解,因此,当我们已经知道一个训练样本的标签 y=1 y = 1 的时候,如果想要第一项为 0 0 ,就是要找到一个 θ θ ,使得θ的转置 ∗X≥1 ∗ X ≥ 1 ,类似的,如果一个训练样本的标签 y=0 y = 0 .为了使代价函数值为 0 0 ,我们需要让θ的转置 ∗X≤−1 ∗ X ≤ − 1 .所以,我们现在可以选择参数,使得第一项等于 0 0 ,这个时候 C∗0+1/2∑(i=1)n▒θ2j=1/2∑(i=1)n▒θ2j C ∗ 0 + 1 / 2 ∑ ( i = 1 ) n ▒ θ j 2 = 1 / 2 ∑ ( i = 1 ) n ▒ θ j 2 ,将上式优化为最小就行了。
如上图所示:将两类样本分开的决策边界很多,但是最好的边界是黑色的那一条,因为黑色的那条决策边界到正样本与负样本之间有最大间距,就是蓝色于黑色的线之间的距离。支持向量机就是最大间距的一种分类方式。
支持向量机又叫最大间距分类器,当正则化参数很大的时候,支持向量机的分类很容易受到异常点的影响,比如当 C C 设置地比较小的时候,添加了左下角的红色样本点,决策边界就会从黑线变成粉色的线了,但是往往仅根据一个样本就改变决策边界是十分不明智的,所以我们在选择正则化参数的时候也要选好参数的大小,这样甚至在数据是线性不可分的情况下,支持向量机往往也能给出很好的决策边界。这里的 C=1λ C = 1 λ , C C 较大的时候, λ λ 较小,可能会导致过拟合,高方差; C C 较小的时候, λ λ 较大,可能会导致欠拟合,高偏差。
上图为计算内积的方法,二范数算出来的是欧式距离。
令 θ0=0 θ 0 = 0 ,这样比较容易画出示意图。令特征数 n=2 n = 2 ,所以现在只有两个特征 x1、x2 x 1 、 x 2 ,上图公式可得,我们的目标函数就是 12||θ||2 1 2 | | θ | | 2 .所以支持向量机做的全部事情就是极小化参数向量θ范数的平方或者说长度的平方。
参上左图为第一个样本,参数 θ θ 的投影为短红线,同理,第二个样本为粉红色的线段,为第二个样本到参数向量 θ θ 的投影,这个投影非常短,粉红色线段表示的实际上是一个负值。
如果能够得到上图所示的决策边界,那么我们的模型可能是上图写出的函数模型,然后用f来替换模型中的每一项 x x ,可以得到上图下面的公式。
给定一个训练实例x,利用x的各个特征与预先选定的地标的近似程度来选取新的特征 f1,f2,f3 f 1 , f 2 , f 3 .
让 f1 f 1 等于上图中的公式的时候, ||x−l(1)||2=∑nj=1(xj−l(1)j)2 | | x − l ( 1 ) | | 2 = ∑ j = 1 n ( x j − l j ( 1 ) ) 2 ,此式为地标 l(1) l ( 1 ) 之间的距离的和,上式中的 f1 f 1 就是核函数,具体而言,这里是一个高斯核函数,这个函数看上去和正态分布很像,但是实际上和正态分布没有什么关系。
如果一个训练实例x与地标 l l 之间的距离近似于 0 0 ,则新的特征 f f 近似等于 1 1 ( e−0 e − 0 等于1),如果训练实例x与地标l之间的距离较远,那么 f f 近似于e的较高次幂=0.上图中水平面的坐标代表 x x ,纵坐标代表 f f ,只有当 x x 和 l(1) l ( 1 ) 重合的时候f才有最大值,随着 x x 的改变, f f 的值改变速率收到 σ2 σ 2 的控制。随着 σ σ 的值增大,下降到最小值的距离也变大了。
当实例位于紫色的点的时候,因为它离 l(1) l ( 1 ) 更近,但是离 l(2) l ( 2 ) 和 l(3) l ( 3 ) 较远,所以 f1 f 1 接近1,而 f2 f 2 , f3 f 3 接近0这个时候假设函数大于 0 0 ,可以预测 y=1 y = 1 ,同理,绿色的点离 l(2) l ( 2 ) 比较近,也可以预测 y=1 y = 1 ,但是对于蓝绿色的点,离三个地标都比较远,预测 y=0 y = 0 .所以,图中红色封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们所选择的地标得出的决策边界,在预测的时候,采用的特征不是训练实例本身的特征,而是通过核函数计算出来的新的特征 f1,f2,f3 f 1 , f 2 , f 3 .
我们通常是根据训练集的数量选择地标的数量的,也就是说,如果训练集中有m个实例,则我们选择m个地标.
令 l(1)=x1,l(2)=x2,l(3)=x3… l ( 1 ) = x 1 , l ( 2 ) = x 2 , l ( 3 ) = x 3 … 这样做可以使我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上。
给定 x x ,计算出新特征 f f ,当 θ θ 的转置 ∗f≥0 ∗ f ≥ 0 的时候,预测 y=1 y = 1 ,否则预测 y=0 y = 0 ,相应修改代价函数为上式training之后的式子,在具体的实施过程中,还需要对最后的归一化项进行微调,用 θTMθ=θTθ θ T M θ = θ T θ ,其中 M M 是根据我们选择的核函数的不同而变化的一个矩阵,这样做是为了简化运算。理论上我们也可以在逻辑回归当中使用核函数,但是使用M来简化计算的方法不适用于逻辑回归,因此计算将非常耗时间。当支持向量机不使用核函数的时候称为线性核函数。当不采用非常复杂的函数,或者当我们的训练集特征非常多但是实例非常少的时候,可以采用不带核函数的支持向量机。
当 C C 较大时,相当于 λ λ 较小,可能会导致过拟合,高方差; C C 较小的时候,相当于 λ λ 较大,导致欠拟合,高偏差。 σ σ 较大的时候,导致过拟合, σ σ 较小的时候,导致欠拟合。
使用现有的一些SVM软件包(比如liblinear,libsvm等)去解决参数 θ θ 的问题。首先要选择参数C,然后选择一个核函数。
上图使用的是一个高斯核函数。
除了高斯核函数,我们还可以选择一些其他的核函数,比如:polynomial kernel、string kernel、chi-square kernel、histogram intersection kernel等等。
如果一共有 k k 个类别,那么我们需要 k k 个模型,以及 k k 个参数向量 θ θ ,同样我们也可以训练 k k 个支持向量机来解决多分类问题,但是大多数的支持向量机软件包都有内置的多类分类功能,我们只需要直接使用就可以了。
n n 为特征数, m m 为训练样本数。
如果相较于 n n 比 m m 大很多,也就是说训练集数据不够支持我们训练一个复杂的非线性模型的时候,一般选用逻辑回归或者是不带核函数的支持向量机解决问题;如果 n n 比较小, m m 中等大小的时候,使用高斯核函数的支持向量机。如果 n n 比较小, m m 比较大的时候,使用支持向量机会比较慢,这时候,我们一般可以增加更多的特征,然后使用逻辑回归或者不带核函数的支持向量机。神经网络在上述三种情况下都可以运行很好,但是训练神经网络可能会比较慢。
https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA
https://www.zhihu.com/question/21094489
http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html
http://blog.csdn.net/passball/article/details/7661887