支持向量机(Support Vector Machine)是一种二元分类器,在学习非常复杂的非线性方程时,能够提供更加清晰和更加强大的方式,通常简称为 SVM。
优化目标
![](https://img.haomeiwen.com/i12790782/f3db321ec276848c.png)
图中为逻辑回归的损失函数,稍加改造即为 SVM 的损失函数(粉色)。其中,,当判断 y = 1 时,如果 z > 1, cost 1 = 0,如果 z < 0 则 cost 1 是一条负斜率的直线;当判断 y = 0 时,如果 z < -1,cost 0 = 0,如果 z > 0,则 cost 0 是一条正斜率的直线。
逻辑回归代价函数:
SVM 代价函数:
在 SVM 代价函数中,我们用 和
替换掉逻辑回归中的
和
,并去掉了
项,这对优化目标不会产生影响。我们还去掉了正则化项中的
,并在公式第一部分加入了参数
,其作用类似
,同样能够起到平衡数据拟合程度和参数惩罚力度的作用。
SVM 的假设函数可以直接输出分类结果,比如:
大间距分类器
![](https://img.haomeiwen.com/i12790782/f06eed98e3ff3f4b.png)
上面说到,使得正样本 ,负样本
,即可实现分类,但 SVM 的代价函数为了把误差降到最小,需要正样本
,负样本
,SVM 比一般分类器要求更加严格,目的是要构建一个安全因子或者叫安全间距。
![](https://img.haomeiwen.com/i12790782/76a5abb6310d2340.png)
可以发现,黑色决策边界(Decision Boundary)与样本的最小间距(即与蓝色直线的距离)更大,这个距离就叫做支持向量机的间距(Margin),这使得支持向量机具有鲁棒性,它会尽量用大的间距去分离数据,因此支持向量机也被称为大间距分类器(Large Margin Classifier)。
![](https://img.haomeiwen.com/i12790782/c3ff76cbcc8b4603.png)
决策边界会受 SVM 代价函数的系数 的影响,如果
较大,决策边界会尽力拟合训练数据,比如图中的异常点,从而决策边界会由黑色直线变为紫色直线。如果
较小,决策边界就会忽略异常点的影响,甚至在数据不是线性可分的情况下也能得到比较好的结果。可以将
比作
,增大
即减小
,可以增强模型的拟合能力;减小
即增大
,可以增强模型的泛化能力。
数学原理
![](https://img.haomeiwen.com/i12790782/ce90b16471a8cccd.png)
在 SVM 中我们会计算 ,暂且将
记作
,将
记作
。已知两个二维向量
,
。
的长度(欧几里得长度)等于
的范数
。根据毕达哥斯拉定理:
。为了计算
,需要将
投影到向量
上,所以需要做一个直角投影,
即为向量
在向量
上的投影长度,或者说量。
就等于
的投影长度
乘以
的长度(即
的范数
),即:
也等于
和
的内积:
![](https://img.haomeiwen.com/i12790782/b980132ce36b19e1.png)
值得注意的是, 和
都为实数。当两个向量的夹角小于 90 度的时候,
为正值,当夹角大于 90 度的时候,
为负值。当然,也可以将
投影到向量
上,然后做相同的计算,可以得到相同的结果,即:
点到边界的距离
通常 SVM 的优化目标为 ,为了简化目标,我们先忽略截距项,使
,并使特征数
,所以优化目标可以简化为:
因为对于任何实数 来说,
。而
即为
的范数
,所以 SVM 的优化目标就是最小化
。
![](https://img.haomeiwen.com/i12790782/730746518d2b94bd.png)
当我们对某个训练样本 进行预测时,需要计算
,我们可以将样本
映射到参数向量
上,得到映射长度
,而
,那么,我们就可以根据
进行预测,即:
![](https://img.haomeiwen.com/i12790782/15a02a054a756e58.png)
上图绿色直线为 SVM 的决策边界,蓝色直线为参数向量 ,
垂直于决策边界,根据条件:
和
分别为正样本
和负样本
在参数向量
上的投影长度,对于正样本
来说,
越大越好,对于负样本
来说,
越小越好。但是我们发现,
和
都很短,说明
很小,
很大,因为
为负数。那么为了预测正确,我们就需要
越大越好,但是我们的优化目标为
,这意味着 SVM 会将
最小化,可见想要将
变大并不容易。
![](https://img.haomeiwen.com/i12790782/696235cd83289953.png)
上图 SVM 的决策边界和参数向量 发生了变化,
仍垂直于决策边界。可以发现,正样本
和负样本
在参数向量
上的投影长度
和
都变长了,根据条件:
增大了,即使减小
,
仍可保持不变。也就是说,即使优化目标
,将
变小一些,SVM 仍然可以预测正确。所以相对第一条决策曲线,SVM 最终会选择第二条,这也是 SVM 为什么会产生大间距分类的原因,而且 SVM 的间距正是
中最小的那一个,优化目标最小化
,就是为了最大化间距
。
上面推导过程始终让 ,这么做的目的是让决策边界通过原点,实际结果表明,无论
是否等于 0,对大间距分类器的效果都不会产生太大影响。
核函数
![](https://img.haomeiwen.com/i12790782/f2779bb4d6cc659f.png)
为了拟合这种复杂的非线性决策边界,通常需要构建复杂的多项式特征集合,比如:
现在我们用 代表特征变量:
现在的问题是,我们如何来构建更好的特征 呢?
![](https://img.haomeiwen.com/i12790782/51c05b3d4f8542c8.png)
图中我们是手动选取的三个点 ,称为标记。对于一个新样本
,我们可以将
和三个标记的相似度作为样本
的特征,即:
其中
表示样本
与标记
的欧式距离的平方(
表示向量
的长度)。而相似度函数
就是核函数,这里所用的核函数
为高斯核函数,事实上还有很多其他的核函数,通常核函数用
表示。相似度公式的分子
也可以写做向量
和标记
之间元素
对应的距离之和。
假如样本 和标记
距离特别近,意味着
,那么
;假如样本
和标记
距离特别远,意味着
为一个很大的数,记作
,那么
。因此,这些特征做的就是衡量样本与每个标记的相似度,如果样本接近标记,那么特征变量接近 1;如果样本远离标记,那么特征变量接近 0。每个标记都着影响着一个特征变量的取值。
![](https://img.haomeiwen.com/i12790782/95e86e0c55b94dce.png)
上图是 值随
点坐标变化的曲面图和等高线图。假设标记
,
,
,当样本
接近标记
时,
,当样本
远离标记
时,
。所以从图中可以直观的感受到,
表示着样本与标记距离的远近程度。
我们也可以通过改变分母的值,观察核函数的变化。如果减小分母的值,比如 ,可以发现,突起的宽度变窄了,等高线也收缩了,随着
从顶点向周围移动(即
与
的距离变大),
从 1 下降到 0 的速度更快了。相反,如果增大分母的值,比如等于
,可以发现,突起的宽度变宽了,等高线也扩张了,随着
从顶点向周围移动(即
与
的距离变大),
从 1 下降到 0 的速度更慢了。
![](https://img.haomeiwen.com/i12790782/0f17551ed05b7277.png)
若我们的假设函数 ,参数值
,对于一个新样本(粉红色),我们需要计算
值进行预测。由于该正样本接近
,远离
和
,所以
。那么,根据公式可以计算得出
,所以我们的预测结果 y = 1。
再取一个样本(绿色)做相似计算,由于该样本接近 ,所以
,根据公式可以计算得出
,预测结果也是 y = 1。
再取一个样本(蓝色)做相似计算,由于该样本距离 都很远,所以
都接近 0。那么,根据公式可以计算得出
,所以我们的预测结果 y = 0。
当训练集所有样本都完成计算,我们会得到一个决策边界(橘红色),在边界区域内,样本的预测结果为 1,在边界区域外,样本的预测结果为 0,这就是通过定义标记点和核函数来得到新的特征变量,从而训练出非常复杂的非线性决策边界的方法。
那么,我们该如何选择标记点和核函数呢?
标记点选取
通常我们是直接将训练样本点作为标记点。 个样本的训练集就可以获得
个标记
。这样一来,特征向量基本上是在描述样本距离每一个训练集样本的距离。
对于一个样本 ,需要计算
和每一个标记(样本)的距离:
并将 个特征加截距项合并为一个
维的特征向量
:
其中, 为截距项,由于特征向量
是
维的,所以参数
也是
维的,这时,我们就可以根据假设函数进行预测了:
以上是我们假设已知参数 来选择特征的过程,那么,我们如何选择参数
呢?我们可以先随机选取
,然后通过最小化代价函数来拟合参数
。
带有原始特征的代价函数:
将新特征带入代价函数并加入正则项:
我们不对截距项 进行正则化,所以
,忽略
之后,
,其中
可以由
代替,
为一个相对较小矩阵,具体大小取决于所采用的核函数,这是
的一种优化计算方式,可以提升了 SVM 的计算效率,从而使得 SVM 可以应用于更大的数据集。因为在大规模数据的情况下,
的计算量将十分庞大。
事实上,核函数定义特征向量,标记点等技术也可以应用于其他机器学习算法,比如逻辑回归等。但应用于 SVM 的计算技巧不能很好地推广到其他算法,所以将核函数应用到逻辑回归上,计算将十分缓慢。相比之下,SVM 能很好的与核函数以及这些计算技巧结合。
参数优化:
关于如何选择 SVM 优化目标中的参数 和
,可以采用偏差方差折中。
我们知道 的作用相当于
,所以较大的
(即较小的
)代表低偏差,高方差,容易过拟合;较小的
(即较大的
) 代表高偏差,低方差,容易欠拟合。
![](https://img.haomeiwen.com/i12790782/a263cf5bf5e107b1.png)
较大的 ,代表平滑的函数曲线,模型变化幅度小,高偏差,低方差;
![](https://img.haomeiwen.com/i12790782/2783a71a32675db3.png)
较小的 ,代表陡峭的函数曲线,模型变化幅度大,低偏差,高方差。
核函数选取
有以下核函数可供选择:
-
线性核函数(Linear Kernel)
线性核函数就是不使用核函数,适用于有大量样本特征,少量样本的情况,这时我们需要拟合一个线性的决策边界,因为样本数量不足很容易过拟合。 -
高斯核函数(Gaussian kernel)
需要选择合适的参数,适用于少量特征,大量样本的情况,可以拟合出非常复杂的非线性决策边界。
注意:使用高斯核函数需要做特征变换(归一化或标准化)来确保 SVM 在计算样本与标记的距离时,不同的特征变量的差异标准是一致的。 -
多项式核函数(Polynomial Kernel)
,其中
为自定义参数,比如
或
可以发现,和
的内积值可能会很大,适用于
和
都是严格的非负数时,可用保证
和
的内积值永远为正数。
-
其他核函数:字符串核函数(String Kernel)、直方相交核函数(Histogram Intersection Kernel)、卡方核函数(Chi-Square Kernel)等。
注意:通常我们只用线性核函数或高斯核函数,而且不是所有的相似函数都是有效的核函数,核函数需要满足一个技术条件是:必须符合莫塞尔定理。因为 SVM 为了有效的求解参数 ,使用了很多数值优化技巧,默塞尔定理确保了 SVM 的优化方法有效。
多分类
![](https://img.haomeiwen.com/i12790782/298ab43dbb7d4197.png)
很多 SVM 软件包已经实现并内置了多分类函数。也可以和逻辑回归多分类一样,假设有 个分类,对每个分类分别进行预测,选择预测值
最大的作为正确分类。
如何选择逻辑回归还是支持向量机
当特征数 远大于样本数
时,比如
,通常建议使用逻辑回归或线性 SVM,因为没有足够的数据来拟合复杂的非线性函数。
当特征数很小,而样本数适中时,比如 ,使用线性 SVM 比逻辑回归更好。
当样本数远大于特征数时,比如 ,通常建议使用逻辑回归或者线性 SVM,因为当数据量超过百万时,高斯核函数的计算会非常慢。
可以发现,逻辑回归和线性核函数非常相似,对于神经网络来说,以上所有情况都适用,前提是结构设计良好的话,但可能训练起来会比 SVM 更慢,而且需要解决局部最优问题,而 SVM 的优化问题属于凸优化,不用担心局部最优问题。
网友评论