support vector machine(SVM)算法在金融等多个领域都有广泛的应用,下面我们就来介绍下SVM算法的基本知识点
SVM算法思想
回顾LR算法,分类器其实是一个概率模型,当h(x) > 0.5,我们说样本属于正类,反之则为负类。但是对于h(x) = 0.5,你可以很自信的说该样本属于哪个类别吗?所以,LR分类判别算法应该存在一个“置信度”的量,比如,如果
(当然会小于1,等价地,我们可以理解为
非常大),我们会很确信地说,样本属于正类。用图像表示的话,见下图:
我们知道LR是线性分类器,假设图中直线为也即分类面(当然这里原点坐标不是(0,0)),对于靠近分类面的点C(可以理解为
接近于0)我们不是很确信分类是否正确,但是对于远离分类面的点A(
),置信度是很高的。
那么我们是否可以构建一种算法,在选择线性分类面时,使其和所有的点都有较远的距离呢?下面我们就来构建这种算法
基本SVM算法
(1)基本模型
首先规定我们的模型是一个二分类器,对于样本点(为了方便,和LR算法将标签定义为(0,1)不同,我们这里定义标签为(-1,1), 考虑一个可以完全将两类样本点分割(注意,这里我们假设可以完全正确的分割数据)的分类面
。我们的目标是,使得所有点和面的距离可以获得最大化,换句话说,我们要使距离分类面最近的那个点与分类面距离仍然很大,这么说有点绕口,我们来把问题公式化,这样会更清楚一些。
设点到分类面的距离为
,则“距离分类面最近的那个点与分类面的距离”可以表示为:
这样,我们的原始问题可以简化为(latex里不好写中文,这里就用英文代替了):
当然是需要用w和b来表示的,运用向量的知识,我们可以得到(这里就不赘述了,运用向量知识很容易求出)
,所以有
注意到公式中的y,其作用是使得距离保持为正数(这样的话,错误分类的数据和分类面的距离就成了负数)。那么每一个样本都被正确地划分该如何表示呢?等价地,我们可以这么想,每一个样本和分类面间距都比上述的最小距离还要大,不就是正确分类了吗,所以限制条件可以表示为:
(2)优化变换
我们知道,用表示一条直线,w和b可以是不唯一的;确切的说,如果(w,b)可以表示该直线,那么(C*w, C*b)也可以表示该直线(C为不为0的实数)。因此,给w和b加一条限制是有必要的,为了方便,我们将限制设为:
(注意上式只包含w和b这两个未知数)。因此,经化简原问题转化为(1/2是人为加上去的,为计算方便):
很明显,以上为一个标准的二次规划问题,对于该类问题,我们有成熟的软件可以使用。注意,如果在限制条件中等号成立,可以确定点距离分类面的距离是所有点中最小的。
SVM对偶解法以及核相关
(1)SVM原始问题的对偶问题
事情到这里好像结束了,但事实上我们有另外一种解决方法,它拓展了SVM的应用范围,并且也加快了SVM的计算速度。根据对偶性(duality)以及KKT条件,我们可以得出原问题的对偶问题:
这里由于我们没有等式约束,所以,拉格朗日对偶函数详细形式为:
(2)运用KKT条件解对偶问题
原问题是凸优化问题,所以我们可以用KKT条件来求解,因此我们有:
这(这里多提一下SVM的一个重要性质,由于
,若
> 0亦即对应样本点并非最近的那个店,则其对应
必为0,换句话说,如果
,其对应样本点很有可能就是距离分类面最近的那个店),且
。通过
(分别对于w和b求偏导)我们可以很容易得出:
代入拉格朗日方程(之所以可以代入,因为这不影响最优化问题解的正确性),我们可以得到:
w和b被消了!这样,原始问题转化为:
关于该优化问题的一种解法SMO算法,我们在另外一篇博客中介绍。
(3)核
观察目标方程,我们发现,x并没有显式地出现在目标方程中,取而代之的是不同x之间的内积,这样就极大的简化了计算,使得SVM非常适合于高维度数据的计算(同时由于连加符号,我们可以看出其对于数据量的计算复杂度很高)。
同时,根据之前章节的描述,SVM本质上是一个线性分类器,但如果线性分类器无法完美地将样本分类,我们可以考虑将样本投射到更高位的空间,,使其在高维空间可以被线性分类(关于高维空间更易于线性分类这一点这里不做详述,有很多参考文献可以说明此事实)。最令人兴奋的是,这种做法并不会增加计算的复杂度,因为我们最后的目标函数最后转化为了
,我们甚至不需要知道线性变换的具体形式,而只需要知道内积
的具体形式即可。这样的话,原始样本甚至可以被投射到无限维!
关于核的选择以及使用,往往要依靠领域知识,我们在这里就不做展开说明了。
线性不可分情况
SVM的基本形态是一个硬间隔分类器,它要求所有样本都满足硬间隔约束(即函数间隔要大于1),所以当数据集有噪声点时,SVM为了把噪声点也划分正确,超平面就会向另外一个类的样本靠拢,这就使得划分超平面的几何间距变小,降低模型的泛化性能。为了解决该问题,我们引入松弛变量来构造一个软间隔分类器,它允许一些点的分类犯错误,但也因此对于噪声点不再那么敏感。
前面章节我们介绍过,为了优化问题的简化,我们限制,我们这里把
称为函数间隔。那么优化问题:
中的限制条件可以理解为对于所有点,函数间隔大于1。如果是软间隔问题,我们自然要放宽要求,函数间隔只要大于一个小于1的正数即可,这样我们为每个点设置一个松弛变量来放宽限制,问题转变为:
但同时松弛变量不可以太大,因为过大的松弛变量会使得过多的点得不到正确划分,所以为了限制其大小,我们在目标函数中加入惩罚项,优化问题转化为:
其中C称为惩罚因子,C越大,我们对于不可线性区分的点越严格。
之后我们依然可以按照对偶变换的方法解决该优化问题,这里不再重复。
总结
SVM的优点:
1. 从SVM的最优化问题形式我们可以看到,对于高维数据,我们只要知道其核的解析表达式而非其特征的具体表达式,所以SVM非常适合高维数据,尤其是数据维度大于样本数量的情形。
2. 可以通过是不同的核函数来解决不同领域的问题。
SVM的缺点:
1. 对于样本数量的复杂度比较高,不适用与样本量大的数据。
2. 核函数需要人为选择
3. 不适用于特征数量庞大的数据,因为这样会造成决策树生长缓慢