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

相关推荐
Mantanmu2 分钟前
Python训练day40
人工智能·python·机器学习
海棠一号3 分钟前
JAVA理论第五章-JVM
java·开发语言·jvm
天天爱吃肉82186 分钟前
新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
android·python·嵌入式硬件·汽车
ss.li8 分钟前
TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
javascript·人工智能·python
小天才才18 分钟前
前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
人工智能·深度学习·机器学习·自然语言处理
l木本I22 分钟前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
MPCTHU25 分钟前
机器学习的数学基础:神经网络
机器学习
哆啦A梦的口袋呀25 分钟前
基于Python学习《Head First设计模式》第七章 适配器和外观模式
python·学习·设计模式
十月狐狸28 分钟前
Python字符串进化史:从青涩到成熟的蜕变
python
草莓熊Lotso31 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法