支持向量机SVM

本文介绍支持向量机SVM(Support Vector Machine)

参考:

SVM 简介

支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

image

一个超平面(Hyperplane)由法向量W和截距b决定,其方程为\(W^TX+b=0\), 可以规定法向量指向的一侧为正类,另一侧为负类。下图画出了三个平行的超平面,法方向取左上方向。

为了找到最大间隔超平面,我们可以先选择分离两类数据的两个平行超平面,使得它们之间的距离尽可能大。在这两个超平面范围内的区域称为“间隔(margin)”,最大间隔超平面是位于它们正中间的超平面。这个过程如上图所示。

SVM 求解W和b

下面介绍函数中W和b如何求解。

目标函数

image

拉格朗日乘子

拉格朗日乘数再处理不等式问题时,引入松弛变量,这里用\(a_2\)(用平方\(>=0\)的特性),将不等式问题转换为等式问题

image

对于上述公式,转换为:

image

引入拉格朗日常数λ:

image

这里用到对偶性转化和KKT条件,详见:https://zhuanlan.zhihu.com/p/480302399

image

SMO优化

我们可以看出来这是一个二次规划问题,问题规模正比于训练样本数,我们常用 SMO(Sequential Minimal Optimization) 算法求解。

SMO(Sequential Minimal Optimization),序列最小优化算法,其核心思想非常简单:每次只优化一个参数,其他参数先固定住,仅求当前这个优化参数的极值。我们来看一下 SMO 算法在 SVM 中的应用。

image

Soft Margin

在实际应用中,完全线性可分的样本是很少的,如果遇到了不能够完全线性可分的样本,我们应该怎么办?比如下面这个:

image

解决该问题的一个办法是允许SVM在少量样本上出错,即将之前的硬间隔最大化条件放宽一点,为此引入“软间隔(soft margin)”的概念。为了使不满足上述条件的样本点尽可能少,我们需要在优化的目标函数里面新增一个对这些点的惩罚项。最常用的是hinge损失:\(L_{hinge}(z)=max(0,1-z)\)

即若样本点满足约束条件损失就是0, 否则损失就是\(1-z\),则优化目标变成:

\(\min _{W, b} \frac{1}{2}\|W\|^{2}+C \sum_{i=1}^{n} \max \left(0,1-y_{i}\left(X_{i}^{T} W+b\right)\right)\)

其中\(C\)称为惩罚参数,\(C\)越小时对误分类惩罚越小,越大时对误分类惩罚越大,当\(C\)取正无穷时就变成了硬间隔优化。实际应用时我们要合理选取\(C\)\(C\)越小越容易欠拟合,\(C\)越大越容易过拟合。

如果我们引入“松弛变量”\(\xi\),上式则变为:

\(\min _{W, b, \xi} \frac{1}{2}\|W\|^{2}+C \sum_{i=1}^{n} \xi_{i}\)
s.t. \(y_{i}\left(X_{i}^{T} W+b\right) \geq 1-\xi_{i}\)
\(\quad \xi_{i} \geq 0, i=1,2, \ldots n\)

image

这时求得w和b的解为:

\(\hat{W}=\sum_{i \in S V} \hat{\alpha}_{i} y_{i} X_{i}\)
\(\hat{b}=y_{j}-\sum_{i \in S V} \hat{\alpha}_{i} y_{i} X_{j}^{T} X_{i}\)

核函数

在分类问题中会遇到线性不可分的情况,如下图:

image

对于在有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机,就是非线性 SVM。可以通过非线性变换将它转化为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。

image

通过核函数(Kernel Function) 将原来空间中的点向特征空间中进行投影,公式\(k(x,y)=(\phi(x),\phi(y))\)\(x_i\)\(x_j\) 在特征空间的内积等于它们在原始样本空间中通过函数 \(k(x,y)\) 计算的结果,我们就不需要计算高维甚至无穷维空间的内积了。减少了内存消耗和计算量。

常用核函数

常用核函数有以下几种:

  • 线性核函数
    image

  • 高斯KBF核函数
    image

  • 多项式核函数
    image

  • Sigmoid核函数
    image

SVR和SVC

SVM从原理可知只用于二分类,对于分类问题和回归问题,需要用到其扩展SVC和SVR

  • SVC:Support Vector Classification, 用于分类
  • SVR:Support Vector Regression, 用于回归

Sklearn里支持的svm算法:

  • svm.LinearSVC Linear Support Vector Classification.
  • svm.LinearSVR Linear Support Vector Regression.
  • svm.NuSVC Nu-Support Vector Classification.
  • svm.NuSVR Nu Support Vector Regression.
  • svm.OneClassSVM Unsupervised Outlier Detection.
  • svm.SVC C-Support Vector Classification.
  • svm.SVR Epsilon-Support Vector Regression.

image

这部分可以参考:http://scikit-learn.org.cn/view/83.html#

posted @ 2022-07-18 20:26  Asp1rant  阅读(80)  评论(0编辑  收藏  举报