博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解支持向量机
阅读量:4187 次
发布时间:2019-05-26

本文共 1208 字,大约阅读时间需要 4 分钟。

从感知机到支持向量机

支持向量机(support vector machine,SVM)是一种二类的分类模型,它的基本模型是:特征空间中间隔最大的线性分类器。间隔最大使其有别于感知机算法,感知机算法是对线性可分问题进行二分类的算法,它是要满足能将其分开即可,因此SVM与感知机的区别在于间隔最大这一特点。如下图所示:

这里写图片描述

来源:机器学习

从上图中可以看到,有许多的线段都可以将正负样本分开,而感知机可以从这些线中选择任意的一个,因此感知机的解是不唯一的,而SVM是寻找最大间隔的超平面,因此它的解是唯一的。关于感知机可以参考:

支持向量机包含着由简单到复杂的过程,其可以分为:

1. 线性可分的支持向量机

当数据线性可分时,通过硬间隔最大化(hard margin maximization),学习到一个线性的分类器,其有称为硬间隔支持向量机。

2. 线性支持向量机

当训练样本近似的线性可分时,通过软间隔最大化(soft margin maximization),其学习的仍然是一个线性的分类器,其又可称为软间隔支持向量机。

3. 非线性支持向量机

当训练样本线性不可分的时候,可以通过核技巧(kernel method)及软间隔最大化,学习非线性的支持向量机。

下面对其分别介绍。

线性可分支持向量机

首先要明确,我们的目标,当给定的数据线性可分时,通过间隔最大等价的求解响应的凸二次规划问题学习得到的分离超平面:

wx+b=0
w,b是我们要求的值,分类决策函数为:

f(x)=sign(wx+b)

w*x+b>0时属于正样本,否则为负样本。

函数间隔和集合间隔

这里写图片描述

间隔最大化

所谓的间隔最大化是对于几何间隔的最大化,在选择分离超平面是,函数间隔会随着w,b的比例变换而变化,因此选择几何间隔。

这里写图片描述

另一种最优化的推导方式如下图所示:

这里写图片描述

引用机器学习中的一张图进行总结:

这里写图片描述

其中,虚线上的点在确定分离超平面中起着决定性的作用,它们被称为支持向量,所以讲这种分离模型称为支持向量机。支持向量的个数一般很少,所以支持向量机有很少的“重要的”训练要本确定。

原始问题的优化

从上面的过程中,我们可以得到对于原始问题的优化问题:

这里写图片描述

对偶问题

在上述的原始问题中,其实已经可以解决线性可分的问题了,因为上面的优化问题是一个凸二次规划问题,可以用现成的优化工具求解,那么为什么还需要对偶问题呢? 其优点有两点:

1.对偶问题往往更易求解,效率更高

2.这样可以很自然的引入核函数,进而推广到非线性分类问题

拉格朗日对偶函数

关于拉格朗日对偶函数的基本知识

这里写图片描述

这里写图片描述
这里写图片描述

求解过程

因此对原始问题构建拉格朗日函数为:

这里写图片描述

因此原始问题的对偶问题就变成了:

这里写图片描述

对对偶问题的求解过程如下:

这里写图片描述

这里写图片描述

因此得到对偶形式的最优化算法:

这里写图片描述

这里写图片描述
来源:统计学习方法

从w,b的表达式中可以看出,w,b的值只依赖于alpha>0的点,因此将这些点称为支持向量。

线性支持向量机

你可能感兴趣的文章
两数相加(Go,LeetCode)
查看>>
Go int类型的最大值和最小值
查看>>
最长回文子串(Python,LeetCode)
查看>>
最长回文子串(Go,LeetCode)
查看>>
微信拼手气红包实现(Go,腾讯面试题)
查看>>
Z字形变换(Python,LeetCode)
查看>>
Z字型变换(Go,LeetCode)
查看>>
将十进制整数转换为字符串实现(Go)
查看>>
Go fmt.Println函数:将数据打印到控制台
查看>>
Linux mv命令:重命名文件
查看>>
Flask render_template函数
查看>>
整数反转(Python,LeetCode)
查看>>
CentOS修改主机名
查看>>
Python list remove方法
查看>>
整数反转(Go, LeetCode)
查看>>
查询Git版本
查看>>
Shell关系运算符
查看>>
Git配置用户信息
查看>>
删除Linux用户
查看>>
Python list pop方法:弹出列表内的元素
查看>>