「机器学习」支持向量机SVM
SVM(Support Vector Machine)又称为支持向量机,是一种用于机器学习的算法,不仅支持线性分类,结合核方法还可以用于非线性分类。其思想主要为最大间隔,推导依赖于对偶理论,因此可以将SVM归结于:间隔、对偶、核方法。
间隔
简单举例一个二分类问题,假设有线性可分的两堆点
要将它们分开的超平面有很多种,SVM做的相当于要寻找一个最优的超平面 $w^Tx+b=0$ 来分开不同类别的样本点,因此首先需要定义什么样的超平面是最优的,也就是所有样本点到超平面的最短距离是最大的,假设两个类别中距离分隔超平面最近的点所在的超平面分别为 $w^Tx + b =1$ 和 $w^Tx+b = -1$(这里的 $1,-1$ 只是为了方便推导,不影响优化的结果,因为你总是可以对超平面乘以一个系数然后做变量替换得到$w^Tx + b =1$ 和 $w^Tx+b = -1$),SVM要最大化的间隔就是这两个平面之间的距离。
你可能要问两个平面的距离怎么求?回忆下高中的两条平行直线的距离公式,对于直线 $ax+by+c_1 = 0$ 和 $ax + by +c_2 = 0$,距离公式为 $$d = \frac{|c_1-c_2|}{\sqrt{a^2+b^2}}$$
(莫名的亲切感有没有)那平面的距离公式类比下就可以得到: $$ \text{margin} = \frac{1 - (-1)}{\sqrt{w_1^2+w_2^2+ … + w_p^2}} = \frac{2}{||w||} $$
$w$ 的维度为 $p$, $w_i$ 表示 $w$ 的第 $i$ 个元素。SVM的目标就是最大化这个margin,那需要满足什么约束呢?首先分类要准确吧这可是分类器的初衷,即
上面两个式子的直观解释就是样本点在超平面 $w^Tx + b \ge +1$ 和 $w^Tx +b \le -1$ 的两侧。可以进一步合并为 $$ y_i(w^Tx_i+b) \ge +1, \forall i = 1,…,N $$
那么我们要求解相当于是一个目标函数为最大化间隔且满足分类约束的优化命题:
等价于最小化问题(目标函数取倒数)
对偶
我们已经将SVM的思想表达为优化命题的形式,接下来考虑如何对其进行求解,对于一个含约束的优化命题可以通过拉格朗日乘子法转化为无约束问题,然后通过求解对偶问题来间接求解原问题。
对于上述SVM的最小化问题,构造拉格朗日函数
原问题的拉格朗日形式为:
对偶问题为
先看对偶问题的内层 $\min_{w,b}L(w,b,\alpha)$,对于这个无约束最小化问题,直接求导
再将求导得到的结果带入拉格朗日函数 $L(w,b,\alpha)$ 得到外层的最大化问题为:
这样得到的是一个二次规划问题,很多求解器可以完美解决,但如果样本数过多,则计算量过大。序列最小最优化SMO算法是高效求解这个问题的算法代表。SMO算法的思想与坐标上升算法的思想类似。坐标上升算法每次通过更新多元函数中的一维,经过多次迭代直到收敛来达到优化函数的目的,SMO则是每次选择尽量少的变量来优化,不断迭代直到函数收敛到最优值。
在求解得到 $\alpha^*$ 后,如何求解原问题的 $w^*,b^*$ 呢?
对于 $w$,直接带入求解对偶问题内层最小化问题的极值条件:
可以看出 $w$ 仅由 $\alpha_i^*$ 大于0 的元素对应的 $x_i$ 构成,这些 $x_i$ 也称为支持向量。
对于 $b$,找到 $\alpha_t^* > 0$ 的点,然后根据KKT条件中的松弛互补条件
可以得到 $x_t$ 在margin上且
$$ {w^*}^Tx_t + b^* = y_t $$
所以
这样就得到了用于分类的超平面了,对于测试样本,只需要带入超平面检验其正负(在超平面的哪一侧)就能进行分类。
总结一下SVM的套路:首先根据最大间隔(max问题)的思想确定目标函数(min问题),将原问题(带约束)表示为拉格朗日函数的形式(minmax问题,无约束),转换为对偶问题(maxmin问题),对于内层无约束min问题,求导并将极值条件代入拉格朗日函数,可以得到外层max问题是一个二次规划,求解得到拉格朗日乘子的最优解 $\alpha^*$ 后反求超平面参数 $w^*,b^*$,其中 $b^*$ 需要利用KKT松弛互补条件求解。
核方法
对于线性不可分的样本,我们可以对原始样本 $x_i \in \mathbb{R}^p$ 进行非线性变换 $\phi(x_i) \in \mathbb{R}^q$ (通常 $q>p$) 得到高维特征空间,在特征空间中寻找一个超平面 $w^T\phi(x) + b = 0$ 来划分不同类别的样本点。推导思路与上面一致,只是原来 $x_i$ 的位置需要用 $\phi(x_i)$ 替代,并且 $\phi(x_i)^T\phi(x_j)$ 可以用核函数表示为 $\kappa(x_i,x_j)$。
Soft Margin SVM
上面讲述的Hard Margin SVM可能出现两个问题:
投影到高维空间仍然不可分
过拟合
改进方法:加入软约束,原来我们要求分类必须准确,即
$$ y_i(w^Tx_i +b) \ge 1, \forall i=1,…,N $$
现在我们允许一些异常点的出现,也就是说异常点不一定需要满足分类约束(异常点可以在超平面 $w^Tx+b = 1$ 和 $w^Tx + b =-1$ 之间),与超平面的距离假设为 $\epsilon_i$,同时我们需要对 $\epsilon_i$ 进行惩罚,这样才能确保分类的准确性。可以理解为我们期望正常情况下 $\epsilon_i$ 都为 0,只有在异常点出现时 $\epsilon_i$ 才是个大于零的实数。对应的优化命题可以改写为
其中 $C\ge 0$ 是可调参数,表示对异常点的惩罚程度,$\epsilon_i$ 表示软约束。
相比于原来hard margin的SVM,这一优化命题多了 $N$ 条关于 $\epsilon_i$ 的不等式约束,还是跟先前一样的套路,写成拉格朗日函数
转化为对偶问题,内层的最小化问题求导得到极值条件
然后代入 $L(w,b,\epsilon,\alpha,\beta)$ 并求解外层max问题,最后来根据KKT条件求解超平面参数。
多类别问题
两种策略(假设共有K个类别)
一对一 (one-against-one):所有类别两两之间进行分类得到 $C_K^2$ 个超平面,对于测试数据代入所有超平面进行判断,然后采用投票表决进行分类。
一对所有 (one-against-all):针对一个类别和剩下所有类别进行分类得到 $K-1$ 个超平面,对于测试数据,代入超平面方程,选择结果最大的那个超平面对应的类别作为分类结果。