【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需要对代码做一些修改。

相关推荐
needn12 小时前
TRAE为什么要发布SOLO版本?
人工智能·ai编程
毅航12 小时前
自然语言处理发展史:从规则、统计到深度学习
人工智能·后端
前端付豪12 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
ursazoo12 小时前
写了一份 7000字指南,让 AI 帮我消化每天的信息流
人工智能·开源·github
曲幽13 小时前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战13 小时前
Pydantic配置管理最佳实践(一)
python
_志哥_16 小时前
Superpowers 技术指南:让 AI 编程助手拥有超能力
人工智能·ai编程·测试
YongGit17 小时前
OpenClaw 本地 AI 助手完全指南:飞书接入 + 远程部署实战
人工智能
程序员鱼皮18 小时前
斯坦福大学竟然开了个 AI 编程课?!我已经学上了
人工智能·ai编程
星浩AI18 小时前
Skill 的核心要素与渐进式加载架构——如何设计一个生产可用的 Skill?
人工智能·agent