认识
虽然自己理解了支持向量机的原理和应用,但是写博客去让每一位读者都清楚真的很难,这里强烈推荐两个参考资源,大家可以去看一下,并动手推一下公式(至少从我第一次接触SVM到回到实验室将支持向量机应用在肌电识别上至少推导SVM有3次了,屡试不爽)。
- 统计学习方法,密码:4t66
- 支持向量机通俗导论(理解SVM的三重境界),密码:dx9j
附上大佬的博客链接:支持向量机通俗导论(理解SVM的三层境界)
什么是支持向量机
支持向量机(support vector machines,SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法[1]。
支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linear support vector machine)及非线性支持向量机(non-linear support vector machine)。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量
机;当训练数据线性不可分时,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。
当输入空间为欧氏空间或离散集合、特征空间为希尔伯特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。核方法(kernel method)是比支持向量机更为一般的机器学习方法。
原始最优化问题
支持向量机最简单的情况是线性可分支持向量机,或硬间隔支持向量机。构建它的条件是训练数据线性可分。其学习策略是最大间隔法。可以表示为凸二次规划问题,其原始最优化问题为:
(1) min w , b 1 2 ∥ w ∥ 2 s.t. y i ( w ⋅ x i + b ) − 1 ⩾ 0 , i = 1 , 2 , ⋯   , N \begin{aligned} \begin{array}{ll}{\min _{w, b}} & {\frac{1}{2}\|w\|^{2}} \\ {\text { s.t. }} & {y_{i}\left(w \cdot x_{i}+b\right)-1 \geqslant 0, \quad i=1,2, \cdots, N}\end{array}\tag{1} \end{aligned} minw,b s.t. 21∥w∥2yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N(1)
求得最优化问题的解为 w ∗ , b ∗ w^*,b^* w∗,b∗ ,得到线性可分支持向量机,分离超平面是:
(2) w ∗ ⋅ x + b ∗ = 0 \begin{aligned} w^{*} \cdot x+b^{*}=0\tag{2} \end{aligned} w∗⋅x+b∗=0(2)
分类决策函数是:
(3) f ( x ) = sign ( w ∗ ⋅ x + b ∗ ) \begin{aligned} f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)\tag{3} \end{aligned} f(x)=sign(w∗⋅x+b∗)(3)
最大间隔法中,函数间隔与几何间隔是重要的概念。
线性可分支持向量机的最优解存在且唯一。位于间隔边界上的实例点为支持向量。最优分离超平面由支持向量完全决定。
二次规划问题的对偶问题是:
(4) min 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i s.t. ∑ i = 1 N α i y i = 0 α i ⩾ 0 , i = 1 , 2 , ⋯   , N \begin{aligned} \begin{array}{l}{\min \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i}} \\ {\text { s.t. } \quad \sum_{i=1}^{N} \alpha_{i} y_{i}=0} \\ {\alpha_{i} \geqslant 0, \quad i=1,2, \cdots, N}\end{array}\tag{4} \end{aligned} min21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi s.t. ∑i=1Nαiyi=0αi⩾0,i=1,2,⋯,N(4)
通常,通过求解对偶问题学习线性可分支持向量机,即首先求解对偶问题的最优值 a ∗ a^* a∗,然后求最优值 w ∗ w^* w∗