本文来自之前在Udacity上自学机器学习的系列笔记。这是第10篇,介绍了监督学习中的支持向量机。
支持向量机
支持向量机是一种分类模型,它是在给定的有两个类别的数据集下,寻找一条分割线(称为“超平面”)将数据集正确地分成两类。
比如说下图中的两个类别数据,分别有三条分割线,将数据分隔开来。
你觉得哪一条直线是最佳分割线呢?这里我们得先定义怎么样才是“最佳”。为此,我们认为,一条最佳分割线除了正确分类数据外,还应该最大化这条分割线到两边最近的数据点所在的平行线的距离。我们把这段距离叫做“Margin”。除了分类正确,还在最大化“Margin”。
支持向量机的模型推导
下图有正样本和负样本两类数据点。我们希望找到中间那条黄色的分隔线,同时它与两类样本的最近邻点所在的平行线距离最大化。
如图所示,我们把这些点看成是二维坐标下的向量,那么两个向量的点积就是一个向量到另一个向量的投影长度。
假设是垂直于黄线的向量,我们要判断给定的任意一点是正还是负,我们可以根据这个条件来判断,即,它表示什么意思呢?它的意思是,如果两者的点积大于等于某个值,则判断为正;否则为负。向量的点积有实际的含义,它表示其中一个向量在另外一个向量的投影的长度。所以,大于说明在分隔线之上,为正样本;小于说明在分隔线之下,为负样本。
因此,决策规则表示为
,
假设是正样本,则
假设是负样本,则
设定,当为正样本时;否则
从而可以得到
决策规则变换为, 对于所有训练集
从而,上图中的“Margin”的宽度就等于
问题就转换为求解的问题,也是的问题。
综上,这是一个在约束条件下多元函数求极值的问题,可以使用拉格朗日乘数法来解决。
约束条件也就是上面提到的决策规则, 对于所有训练集
构造以下的函数
其中,,函数对求导,可得
所以
函数对求导,可得
所以
将上式中的和分别带回函数和决策规则,经过推导可以得到
如果,那么为正样本。
到了这一步后,我们已经得到式,根据拉格朗日对偶性,接下来的问题就是求解的问题(完整地,应该就是问题)。其中是约束条件。该问题可以使用数值分析中的SMO(Sequential Minimal Optimization)算法进行求解。
在得到的值之后,就可以求解和了(求解还需要再推导一番)。
解读
上面得出的式,在实际运用时有个特点,就是大部分的是为0的。它是通过对整体样本判断后得出哪些为0,哪些不为0。这说明在决策时真正有影响力的数据点是靠近决策边界的点,而那些远离决策边界的点,影响不大。
式中的告诉我们找出所有的点对,弄清楚哪些点是重要的,能够影响决策边界的定义的点对。然后则告诉我们,从这些点对的输出的角度出发,它们是如何彼此相关,以及考虑它们之间的相似程度。
另外,从式可以看出,其结果只取决于,所以对于不能使用一条直线直观地分隔开数据的情况,我们可以构造函数来对数据进行转换,实现线性可分。我们称其为核函数,它表示了数据之间的一种相似性。核函数也是我们将域知识(Domain Knowledge)引入到SVM的机制。
常用的核函数有
参考sklearn:
https://scikit-learn.org/stable/modules/svm.html#svm