支持向量机(一)线性可分支持向量机
支持向量机(二)线性支持向量机
支持向量机(三)非线性支持向量机与核函数
支持向量机(四)SMO算法
一、线性支持向量机
线性可分支持向量机对线性不可分数据不适用,因为这时的不等式约束不成立。需要修改硬间隔最大化为软间隔最大化。
线性不可分意味某些样本点 (xi,yi) 不满足函数间隔 ≥1 的约束条件。可以对每个样本点 (xi,yi) 引进一个松弛变量 ξi≥0,使函数间隔加上松弛变量 ≥1。即:
yi(ω⋅xi+b)≥1−ξi
对每个松弛变量 ξi,支付一个代价 ξi。目标函数由原来的 12||ω||2 变为
12||ω||2+CN∑i=1ξi(1)
C>0 为惩罚参数,C 值越大表示对误分类惩罚越大。
最小化目标函数 (1) 的两层含义:使 12||ω||2 尽量小即间隔尽量大,同时使误分类点的个数尽量小,C 是调和二者的系数。
线性支持向量机的优化问题作为原始问题:
minω,b,ξ 12||ω||2+CN∑i=1ξis.t. yi(ω⋅xi+b)≥1−ξi, i=1,2,...,Nξi≥0, i=1,2,...,N(2)(3)(4)
原始问题 (2)∼(4) 是凸二次规划问题,因而 (ω,b,ξ) 的解是存在的。且 ω 的解是唯一的,b 的解可能不唯一,而是存在一个区间内。
二、对偶算法
原始问题 (2)∼(4) 的对偶问题
minα 12N∑i=1N∑j=1αiαjyiyj(xi⋅xj)−N∑i=1αis.t. N∑i=1αiyi=00≤αi≤C, i=1,2,...,N(5)(6)(7)
原始最优化问题 (2)∼(4) 的拉格朗日函数是
L(ω,b,ξ,α,μ)=12||ω||2+CN∑i=1ξi−N∑i=1αi(yi(ω⋅xi+b)−1+ξi)−N∑i=1μiξi(8)
其中,αi≥0,μi≥0。
对偶问题是拉格朗日函数的极大极小问题。
首先 L(ω,b,ξ,α,μ) 对 ω,b,ξ 的极小,由
▽ωL(ω,b,ξ,α,μ)=ω−N∑i=1αiyixi=0
▽bL(ω,b,ξ,α,μ)=−N∑i=1αiyi=0
▽ξiL(ω,b,ξ,α,μ)=C−αi−μi=0
得
ω=N∑i=1αiyixi(9)
N∑i=1αiyi=0(10)
C−αi−μi=0(11)
将式 (9)∼(11) 代入式 (8),得
minω,b,ξL(ω,b,ξ,α,μ)=−12N∑i=1N∑j=1αiαjyiyj(xi⋅xj)+N∑i=1αi
再对 minω,b,ξ L(ω,b,ξ,α,μ) 求 α 的极大,即得对偶问题:
maxα −12N∑i=1N∑j=1αiαjyiyj(xi⋅xj)+N∑i=1αis.t. N∑i=1αiyi=0C−αi−μi=0αi≥0μi≥0, i=1,2,...,N(12)(13)(14)(15)(16)
将对偶最优化问题 (12)∼(16) 进行变换;利用等式约束 (14) 消去 μi,从而只留下变量 αi,并将约束 (14)∼(16) 写成
0≤αi≤C(17)
再将目标函数求极大转换为求极小,得到对偶问题 (5)∼(7)。通过求解对偶问题得到原始问题的解。
定理 : 设 α∗=(α∗1,α∗2,...,α∗N)T 是对偶问题的解,若存在 α∗ 一个分量 α∗j,0<α∗j<C,按下式求原始问题的解 ω∗、b∗ :
ω∗=N∑i=1α∗iyixib∗=yj−N∑i=1α∗iyi(xi⋅xj)(18)(19)
根据 KKT 条件可证明。
1.线性支持向量机对偶算法
输入:训练集 T=(x1,y1),(x2,y2),...,(xN,yN),其中 yi∈(−1,1)
输出:分离超平面、分类决策树
① 选择惩罚参数 C>0,构造并求解凸二次规划问题
minα 12N∑i=1N∑j=1αiαjyiyj(xi⋅xj)−N∑i=1αis.t. N∑i=1αiyi=00≤αi≤C, i=1,2,...,N
求得最优解 α∗=(α∗1,α∗2,...,α∗N)T。
② 计算 ω∗、b∗。
ω∗=N∑i=1α∗iyixi
选择 α∗ 一个分量 α∗j,0<α∗j<C,计算
b∗=yj−N∑i=1α∗iyi(xi⋅xj)
③ 求得分离超平面
ω∗⋅x+b∗=0
分类决策函数:
f(x)=sign(ω∗⋅ x+b∗)
理论上原始问题 (2)∼(3) 对 b 的解可能不唯一,然而在实际应用中,往往只会出现算法中的情况。
三、支持向量
在线性不可分的情况下,对偶问题 (5)∼(7) 的解 α∗=(α∗1,α∗2,...,α∗N)T 中对应 α∗i>0 的样本点 (xi,yi) 的实例 xi 称为支持向量(软间隔的支持向量)。
如下图,”○“ 表示正例,”ד 表示负例,实线表示分离超平面,虚线表示间隔边界,ξi||ω|| 表示样本 xi 到间隔边界的距离。

这时的支持向量比线性可分的情况复杂。支持向量 xi 或者在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面误分一侧。
若 α∗i<C,则 ξi=0,支持向量 xi 在间隔边界上;
若 α∗i=C,0<ξi<1,支持向量 xi 在间隔边界与分离超平面之间;
若 α∗i=C,ξi=1,xi 在分离超平面上;
若 α∗i=C,ξi>1,xi 在分离超平面误分类一侧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)