热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

线性SVM,线性可分SVM与核函数

SVM即支持向量机(supportvectormachine),是一种分类算法。SVM适合中小型数据样本、非线性、高维的分类问题。它将实例

SVM即支持向量机(support vector machine),是一种分类算法。SVM 适合中小型数据样本、非线性、高维的分类问题它将实例的特征向量映射为空间中的一些点。如:

而SVM要做的事情就是找到那么一条线, “最好地” 区分这两类点,以后有了新的点,这条线也能做出很好的分类。划分的线是可以有无数条的。

那么哪一条线是最好的呢。SVM 将会寻找可以区分两个类别并且能使间隔(margin or gap)最大的划分超平面。比较好的划分超平面,样本局部扰动时对它的影响最小、产生的分类结果最鲁棒、对未见示例的泛化能力最强。

对于任意一个超平面,其两侧数据点都距离它有一个最小距离(垂直距离),这两个最小距离的和就是间隔。比如下图中两条虚线构成的带状区域就是 gap,虚线是由距离中央实线最近的两个点所确定出来的(也就是由支持向量决定)。

从上图可以看出,虚线上的点到划分超平面的距离都是一样的,实际上只有这几个点共同确定了超平面的位置,因此被称作 “支持向量(support vectors)”,“支持向量机” 也是由此来的。


线性SVM

对于这个划分的超平面,我们可以给一个方程:

\omega ^{T}X+b=0

我们的处理方法是增加松弛因子\varepsilon _{i}

求偏导得

带入式子中得到:

然后求对于α的极大值

构造对偶问题,解约束最优化:

最后得到超平面:

要注意的是:计算b*时,需要使用满足条件0<α

实践中往往取支持向量的所有值取平均作为b* 。

SVM的损失函数为Hinge loss

\left\{\begin{matrix} y=-x+1, x<1 \\ y=0, x\geqslant 1 \end{matrix}\right.

因为最后求超平面的时候我们使用的是两个向量的内积,所以核函数即为定义两个向量的内积。常用的核函数有

多项式核函数:\kappa (x_{1},x_{2})=(x_{1}\cdot x_{2}+c)^{d}

高斯核函数:\kappa (x_{1},x_{2})=exp(-\gamma \left \| x_{1}- x_{2} \right \|^{2})

Sigmod核函数:\kappa (x_{1},x_{2})=tanh(x_{1}\cdot x_{2}+c)


推荐阅读
author-avatar
NOYOKI要跑偏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有