【机器学习】算法原理详细推导与实现(五):支持向量机(下)
上一章节介绍了支持向量机的生成和求解方式,能够根据训练集依次得出
、
的计算方式,但是如何求解需要用到核函数,将在这一章详细推导实现。
核函数
在讲核函数之前,要对上一章节得到的结果列举出来。之前需要优化的凸函数为:
这里假设数据是线性可分隔的,对于这个优化项目,给定一个训练集合,这个问题的算法会找到一个数据集合的最优间隔分类器,可以使训练样本的几何间隔最大化。
在上一章节【机器学习】算法原理详细推导与实现(四):支持向量机(上)中,我们推出了这个问题的对偶问题,也就是要使这个式子最大化:
上面是我们的原始问题,且根据拉格朗日对偶步骤计算得到参数
:
当需要做分类预测时,需要对新来的输入值
进行计算,计算其假设的值是否大于零,也就是做一次线性运算来判断是正样本还是负样本,有如下计算函数:
核函数概念
接下来要介绍“核”的概念,这个概念具有这样的性质:
算法对于x的依赖仅仅局限于这些内积的计算,甚至在整个算法中,都不会直接使用到向量x的值,而是只需要用到训练样本与输入特征向量的内积
而“核”的概念是这样的,考虑到最初在【机器学习】算法原理详细推导与实现(一):线性回归中提出的问题,比如有一个输入
是房屋的面积,
是房子的价格。假设我们从样本点的分布中看到
和
符合3次曲线,那么我们会希望使用
的三次多项式来逼近这些样本点。首先将特征
扩展到三维
,这里将这种特征变换称作
特征映射,映射函数为
:
用
代表原来的特征
映射成的,这里希望得到映射后的特征应用于
svm
分类,而不是最初的一维特征,只需要将前面
公式中的内积从
至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到的一个原因:
为了更好的拟合,另外一个原因是
样本可能存在线性不可分的情况,而特征映射到高维过后往往就可分了。
如果原始特征的内积为
为什么会那么定义核函数?有些时候
的维度将会非常的高,可能会包含非常高维的多项式特征,甚至会到无限维。当
的维度非常高时,可能无法高效的计算内积,甚至无法计算。如果要求解前面所提到的凸函数,只需要先计算
,然后再计算
即可,但是这种常规方法是很低效的,比如最开始的特征是
维,并将其映射到
维度,这时候计算需要
的时间复杂度。这里假设
和
都是
维的:
展开后得到:
也就是说,如果开始的特征是
维,并将其映射到
维度后,其映射后的计算量为
。而如果只是计算原始特征
和
的内积平方,时间复杂度还是