【Python机器学习】支持向量机——寻找最大间隔

如何求解数据集的最佳分隔直线?如下图中:

分隔超平面的形式可以写成,要计算点A到分隔超平面的距离,就必须给出点到分隔面的法线或垂线的长度,该值为。这里的常数b类似于Logistic回归中的截距。这里的向量w和常数b一起描述了所给数据的分隔线或超平面。

分类器求解的优化问题

分类器的工作原理:输入数据给分类器会输出一个类别标签,这相当于一个类似于Sigmoid的函数在作用。下面使用类似海维赛德阶跃函数的函数为作用得到f(),其中当u<-时f(u)输出-1,反之则输出+1。

这里不用1和0的原因是+1和-1仅仅相差一个符号,方便数学上的处理

当计算数据点到分隔面的距离并确定分隔面的放置位置时,间隔通过来计算。如果数据点处于正方向(即+1类)并且离分隔超平面很远的位置时,会是一个很大的正数,同时也会是一个很大的正数。而如果数据点处于反方向(即-1类)并且离分隔超平面很远的位置时,此时由于类别标签为-1,仍然是一个很大的正数。

现在的目标就是找出分类器定义的w和b。为此,我们必须找到具有最小间隔的数据点,而这些数据点也就是前面提到过的支持向量。一旦找到具有最小间隔的数据点,我们就需要对该间隔最大化。这就可以写作:

直接求解上述问题很困难,所以将它转换成另一种更容易求解的形式。首先要做的是固定其中一个因子而最大化其他因子。如果另所有支持向量的都为1,那么就可以通过求的最大值来得到最终解。但是,并非所有数据点的都等于1,只有那些离分隔超平面最近的点得到的值才为1。而离超平面越远的点,其的值也就越大。

在上述优化问题中,给点了一些约束条件然后求最优值,因此该问题是一个带约束条件的优化问题。这里的约束条件就是>=1.0。对于这种优化问题,有一个非常著名的求解方法,即拉格朗日乘子法。通过引入拉格朗日乘子,我们就可以基于约束条件来表述原来的问题。这里的约束条件都是基于数据点的,因为我们就可以将超平面写成数据点的形式。于是,优化目标函数最后可以写成:

其约束条件为:

,和

这里有个假设:数据必须100%线性可分。我们可以通过引入所谓松弛变量,来允许有些数据点可以处于分隔面的错误一侧。这样我们的优化目标就能保持仍然不变,但是此时新的约束条件变为:

,和

这里的常数C用于控制"最大化间隔"和"保证大部分点的函数间隔小于1.0"这两个目标的权重。在优化算法的实现代码中,常数C是一个参数,因此我们就可以通过调节该参数得到不同的结果,一旦求出了所有的alpha,那么分隔超平面就可以通过这些alpha来表达。这一结论十分直接,SVM中的主要工作就是求解这些alpha。

SVM应用的一般框架

SVM的一般流程:

1、收集数据:可以使用任意方法

2、准备数据:需要数值型数据

3、分析数据:有助于可视化分隔超平面

4、训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优

5、测试算法

6、使用算法:几乎所有的分类问题都可以使用SVM,SVM本身是一个二类分类器,对多类问题应用SVM需要对代码做一些修改。

相关推荐
道不尽世间的沧桑44 分钟前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
阿里云云原生1 小时前
山石网科×阿里云通义灵码,开启研发“AI智造”新时代
网络·人工智能·阿里云·ai程序员·ai程序员体验官
久绊A1 小时前
Python 基本语法的详细解释
开发语言·windows·python
diemeng11192 小时前
AI前端开发技能变革时代:效率与创新的新范式
前端·人工智能
有Li2 小时前
跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展
人工智能
Hylan_J4 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
软件黑马王子4 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
莫忘初心丶4 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
闲猫4 小时前
go orm GORM
开发语言·后端·golang
计算机小白一个5 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯