这篇笔记主要记载感知机,逻辑回归以及SVM的概念和推导

感知机

二类分类线性模型:

损失函数选择:

首先想到误分类点个数,但这样的损失函数不是参数w和b的可导函数,不易优化

另一个选择是误分类点到超平面的几何距离总和: 其中M是误分类点集合(ps 该函数是支持向量机损失函数的原始形式)

感知机简化了2中的模型,去掉了,使用误分类点到超平面的函数距离之和,其形式为:

对于误分类点,的符号刚好相反,所以前面加一个负号,使用梯度下降或牛顿法求最小值

感知机的对偶算法,思想就是用拉格朗日乘子线性组合来表示w,具体优势在SVM算法中会提到

逻辑回归

逻辑回归是在线性回归模型上加了Logistic函数映射,或者说把感知机模型中的符号函数改成Logistic函数:

Logistic函数值域为(0,1),因此,类别用0,1表示,即

Logistic函数映射的作用

考虑用线性回归模型做分类的不足:,对于二分类问题,y的取值只有两个,而右边的却是负无穷到正无穷,这种模型本身就存在问题;还有就是假设预测变量y和自变量x之间是线性关系,这往往不符合实际情况,通常情况下,自变量多大或过小时,其变化不会对因变量造成太大变化,而是当自变量接近某一阈值时,自变量的变化会引起因变量的巨大变化,这种关系更适合使用指数描述

可以看出,逻辑回归的函数刚好满足上面两点,这也许就是逻辑回归更适合二分类问题的真正原因

模型参数估计

由于Logistisc函数非线性,如果使用最小二乘去求解,计算复杂;同时,考虑Logistisc函数的指数形式,逻辑回归使用归,根据最大熵原理,使用极大似然做参数估计

TODO 最小二乘和指数形式的极大似然具有一致性 逻辑回归使用极大似然问题作为优化目标,而不是回归问题中常用的最小均方根误差(LMS),一方面和Logist函数的指数形式有关,还有可能最根本的原因是,二者问题不同。回归问题,是一个拟合数据的问题,最根本的是要求拟合数据的误差尽可能小,所以很适合LMS;但对于逻辑回归要解决的分类问题,最根本的是要求分类尽可能正确,所以使用极大似然最大化分类正确的概率,后面可能讲到SVM,其在分类正确的基础上又提出了最大间隔条件,从另一个角度优化分类问题~

对于每个观测点,其概率可以表示为:

因为所以,可以改写上式为:

对所有观测点进行极大似然估计,即:

其中 ,相应的

可以看出,似然函数的设计巧妙的实现了所有数据出现的概率的乘积(之所以是乘积而不是累加是为了使用对数做简化)

取对数化简后得:

对w求偏导得:

可见偏导数结构简单,容易计算,之后使用梯度下降或牛顿法求最优值

支持向量机

感知机模型中使用的是误分类点到超平面的函数间隔

在超平面确定时,函数间隔只能相对地表示点到超平面的远近

在选择超平面的时候,只有函数间隔是不够的,只要成倍的改变w,b,超平面不变,但函数距离就成倍变化

由于我们关注的是超平面,所以可以把函数间隔或w,b固定下来,一般选择固定函数间隔,容易优化

支持向量机是求解能够正确划分数据集并且几何间隔最大的超平面,推导过程:

最大间隔超平面,即最大化超平面(w,b)关于数据集合的几何间隔

考虑几何间隔和函数间隔的关系: ,改写最优化问题为:

由于函数间隔的值不影响最优化问题的解,因此可以固定,改写最优化问题为:

对偶问题的推导

首先构建拉格朗日函数,对每个不等式约束引进拉格朗日乘子并放到目标函数中:

令:

容易验证,但有约束不满足的时候,,比如当时,只要令即可

而当所有条件都满足时,,即我们最初的优化问题

因此,原始问题,等价与,即:

这里,表示该问题的最优解,也即原始问题的最优解

如果把极大,极小的位置转换一下,得:

交换后的问题不再等价与原问题,称为原始问题的对偶问题,其最优值记为

直观上,可以看出,称为弱对偶,其实对于SVM,,称为强对偶

如果原始问题是 Convex 的并且满足 Slater 条件的话,那么 strong duality 成立(充分条件)

Slater条件是指存在严格满足约束条件的点

还有KKT条件。。。

对偶问题的计算

首先L关于w和b最小化,令其偏导数为0得:

带回L得:

此时,我们得到关于对偶变量的优化问题:

该问题可以使用高效的SMO算法求解

该问题求解后得到,可以根据前面求导得到的关系计算w,之后选取一个支持向量(对应的向量)计算b,

将w带回原来的超平面方程得:

这里,我们注意到,优化问题和分离超平面中都是以点积的形式出现的,这样对于后面的核函数技巧非常重要;同时,现在优化问题的中的变量是,数量是样本点个数,而和feature无关,这对于高维问题(文本处理中常见)很高效,其实,对于SVM,变量的个数其实更少,只是少数的‘支持向量’因为,对于所有非’Support Vector’,对应的都为0,因此,对于新点的内积,只需要少量的’支持向量’,而不是所有的数据

核kernel

对于线性不可分的数据,我们通常需要将原始数据映射到高维空间,使其线性可分

最简单的做法,我们可以设定一个将数据从映射到高维的函数,这样分类函数表示为:

其中,是通过求解如下对偶问题得到的:

这个方法说白了就是,拿到非线性数据,找到一个映射函数(不一定映射到高维空间,只要能使数据线性可分),然后将数据通过映射函数映射到新空间,再做线性SVM

假设当前数据2个特征(a,b),映射到三维空间的话,做多有如下多种维度:

上面貌似不对…反正特征随着维度的增加,呈爆炸式增长

设两个变量

设映射函数为:

同时:

我们发现:

二者相等,不同在于:一个是映射到高维空间中,然后再根据内积的公式进行计算;而另一个则直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果。

我们把这里的计算两个向量在映射过后的空间中的内积的函数叫做核函数 (Kernel Function),上面例子中的核函数为:

核函数能简化映射空间中的内积运算——刚好“碰巧”的是,SVM里需要计算的地方,数据向量总是以内积的形式出现的。

因此SVM中的优化问题和决策平面改写为核函数的形式分别为:

决策面函数:

优化问题:

常见的核函数有:

  1. 多项式核:
  2. 高斯核:
  3. 线性核:

异常点Outliers

如果数据线性不可分,可以通过尝试使用核函数将数据映射到高维空间,寻找可能的分隔超平面

但数据常常含有噪音,这些异常点会严重影响超平面的位置,有时,仅仅是因为异常点就导致找不到超平面,如下图中的黄色点:

svm-with-noise

为了处理这种情况,SVM 允许数据点在一定程度上偏离一下超平面,改写优化问题为:

其中,称为松弛变量(slack variable),对应数据点允许偏小的函数间隔的大小

如果我们允许任意大的话,那任意超平面都满足要求了

所以需要在目标函数中加上一个正则项,其中C是常数,用来权衡分割面间隔和数据点偏移量

这样,使用拉格朗日求解对偶问题过程如下:

其中是对偶变量,也即拉格朗日乘子

首先L关于最小化,分别令其偏导数为0得:

将w带回L化简得到和以前相同的目标函数:

这样,最终对偶问题为:

对比没有添加松弛变量前的对偶问题,发现只有对偶变量多了一个上限C

数值优化–SMO算法

求解上面的对偶问题,SVM使用了高效的Sequential Minimal Optimization (SMO) 算法,其基本思路是:

如果所有变量的解都满足优化问题的KKT条件,那么这个优化问题的最优解得到了(KKT条件是优化问题的充要条件);

否则,选取两个变量,固定其他的,针对这两个变量构建一个二次规划问题

该算法是对坐标下降算法( Coordinate Descend )的扩展

坐标下降法的原理是每次选取一个维度进行优化,比如求梯度,不断向梯度的反方向移动,即不断靠近最优值

考虑这里对偶变量的限制:,如果每次选取一个维度进行优化,其他变量视为变量,这样优化是没效果的,因为是确定的

所以,SMO每次每次选择两个坐标维度进行优化,(其中一个是违反KKT条件最严重的),每个迭代步骤实际上是一个可以直接求解的一元二次函数极值问题,因此迭代高效

下面以选取α1和α2为变量,其余为常量为例,详细描述求解过程:

待解决的对偶问题描述为:

选取为变量,固定其他后得:

其中,

因为,将其带入目标函数可以消去α2,从而变成关于α1的一元函数,直接根据导数求极值

求导化简过程复杂,结果是:

其中

svm-smo-alpha

上图中红色线段为解范围

SMO使用一些启发式策略来选取最优的两个坐标维度,可以参见 John C. Platt 的那篇论文 Fast Training of Support Vector Machines Using Sequential Minimal Optimization

TODO

  1. 区分一下:分离超平面方程,分类决策函数,对偶问题
  2. 线性支持向量机的最优解w是唯一的,但b却不唯一

参考

  1. 统计机器学习-李航博士
  2. 支持向量机: Support Vector
  3. 支持向量机: Kernel
TOP