算法总结4—支持向量机
支持向量机……复杂的东西,书里讲得也不怎么详细,起码具体算法没有说……所以又去查了些资料……
支持向量机是用来对数据进行分类的。
首先从最简单的情况开始吧:
如果有一条直线,我们把它看成一条数轴,上面有一些样本点,其中坐标大于某个值的点都属于一类,坐标小于某个值的点都属于一类,那么我们就可以用这个值来做分分界点,它点把直线上的点分为了两类。因为样本点是有限可数的。所以这个分类点的取法不唯一。选好后,随便给我们一个点,我们就可以根据这个随机给出的点是在分界点的左侧还是右侧来判断这个点的类别。
同样,一个平面上有很多样本点,这些点也分为2类,如果我们在平面上可以找到这样一条直线满足这两类样本点分别分布在直线的两侧,那么我们就可以用这个平面作分界面,来对之后随机给出的点进行分类。
仍然用同样的方法,我们可以用一个平面给分布在一个3维立体空间中的点分类。
总结起来就是说:在n维空间中有很多样本点,如果我们能找到一个n-1维的超平面,这个平面恰好把空间中的样本点分在它的两侧,那么我们就可以用这个n-1维的超平面来对之后随机给出点分类。
这种方法有两个问题:
1) 因为那个n-1维的超平面选法往往是不唯一的,我们要选哪一个?
2) 更多情况下,我们找不到这样一个n-1维超平面,你可以想象更多情况下,我们要分类的数据是“混合”在一起的,很难简单的用一个点,一条线,或者一个更高纬度的线性分类器把它分开。
接下来我们就要来解决这个问题。
最优超平面的确定:
如果选择合适的分界超平面呢?直观的来说,我们因该选择一个距离两组数据“最远”的超平面。首先每个点都和这个超平面有一个距离(该距离可以通过把n维空间放入一个n维坐标系后用代数的方法计算出来,具体计算过程此处就不说了。不过1维2维3维的情况你应该能自己算出来吧~~~,理解就好)我们选择的超平面要让所有这些距离中最小的一个值最大。
我们在n维空间空建立一个n维坐标系
在这个n维坐标系中,每个n-1维超平面都可一个用一个方程表示出来,这里设为。
$H(x)=a_{0}+\sum_{i=1}^{n}(a_{i}*x_{i})$
我们用一个变量Y表示一个点相对超平面的关系,在一侧为1.另一侧为-1.
可以证明:(证明过程略)
该平面在满足$Y_{i}H_(x_{i})\geq 1$的约束下
极小化$(\frac{1}{2}\sum_{j=1}^{n}(a_{j}^{2}))$得到
这是一个二次规划问题,我们对它求解就可以得到最优平面。
有时我们找不到这样一个超平面,这时,我们可以把超平面的约束条件放的宽松一点,也就是在超平面附近允许两种分类的点的重叠,可以同过把改为(e>0)来实现这一目的。
(具体证明与求解参考《统计学完全教程》 科学出版社 P290的支持向量机一节)
第二个问题的解决---核方法
很多时候,我们是找不到一个简单的超平面对样本进行划分的,这个时候,我们可以通过坐标变换,把样本点映射到一个可以线形划分的空间中。
这个映射可以是同维度的,即映射前后样本空间的纬度相同,比如:
就可以通过一个简单的求平方运算,把数据从线性不可划分变为线性可分---我们可以很容易的找到一条直线把后者的样本点分成两个部分。
但是很多时候,问题没有这么简单,我们就需要用另外一种映射,即把样本点映射到更高纬度的空间去。
比如上面的左图还可以做这么一种变换:
z1=x1*x1, z2=sqrt(2)x1*x2 (sqrt(2)是指2的平方根) ,z3=x2*x2
这样我们就可以在新的样本空间中很简单的找到一个平面把这些点分开了.仔细分析,你可以发现,这个平面其实是左图中的一个椭圆的经过上述变换后得到的.
较高维空间的线性分类器对应于原空间的一个非线性分类器.
这就是核方法的核心。
通过找到一个合适的映射,我们就可以前面的问题(2)了
这种映射称为核函数,核函数的选择是很有技巧的,它也有一些常见的模型,很多时候我们只要选择合适的模型并计算适当的参数就可以了。具体方法这里不说了,有兴趣的可以参见《RBF核函数的支持向量机参数选择》一文。
找到核函数后,我们就完全解决上述问题了。
(其实这里还有一些简化计算的技巧,这些技巧与其它更具体的东西还是可以去看《统计学完全教程》 科学出版社,真是一本非常强大的书。)
优点:
可以很快的判断一个样本的种类。
缺点:
由于对每个数据集的最佳核变换及相应参数都不一样,所以对每个数据集都要重新学习确定函数与参数。
一般而言,支持向量机更适合包含大量数据的问题,而其他方法如决策树,更适合小规模的数据集。
支持向量机也是一种黑盒技术,由于存在像高维空间的判断,我们很难解释分类的具体标准与原因。