Max Margin
svm 即Suport Vector Machine, 中文意为:支持向量机. 对于二分类问题, 在样本空间中(即便是多维向量, 在空间中可表示为一个点). svm的核心思想就是假设在这2波点的边缘处, 能找到一条直线 wTx+b=0, 能够把这2波点分开, 且该直线上到这2波点的边界(离对方)的点的距离相等, 约束就是使得这个分隔的距离(margin)尽可能大.
从几何上来说, 其实就是3条平行线
- 上: wTx+b=1
- 中: wTx+b=0
- 下: wTx+b=−1
有两点需要说明:
- 1 和 -1 的值是没有关系的, w,b可变, 需关注+ -, 换成 c 和 -c 也是一样的
- 用来确定这个"分隔区域" 的边界上的点(构成边界) 就称为 支持向量.
我们希望这个"分割区"越宽越好", 即这平行线(边界)的距离越大越好. 转化数学形式, 也就是,假设这两个边界上有2个支持向量(点) x1, x2, 即构成的向量可以表示为:
x1−x2
而向量 x1, x2 是满足定义的边界线方程的, 即
wTx1+b=1wTx2+b=−1
相减得:
(wTx1+b=1)−(wTx2+b)=2
wT(x1−x2)=2=||w||2 ||x1−x2||cosθ
||x1−x2||cosθ=2||wT||2
假设x1, x2 到中线wTx+b=0的距离分别为 d1,d2
即: d1=d2=||x1−x2||cosθ2=1||wT||22
即欧氏距离margin = d1+d2=2||w||2
对于范数来说, ||w||2和||wT||2 值是一样的, 就是一个标量值
对于wT(x1−x2)=2 表示两个向量做内积
内积
- 首先, 矩阵其实就是广义的向量, 从向量空间定义来看, 也是满足对 加法和数乘 封闭 的
- 内积(点积) 定义为向量左乘其转置, 即<a,a>=aTa; <x,y>=xTy
- 几何上, <x,y>表示x在y上 的投影向量的长度: |x||2| ||y||2cosθ
假设空间的一组基(base) 是(1,0)T,(0,1)T, 向量x, y 分别在该基下的分分量分别为:
x=(x1,x2)T, y=(y1,y2)T
||x||2=length(x)=√x21+x22, ||y||2=√y21+y22
<x,y>=xTy=yTx=x1y1+x2y2=||x||2 ||y||2cosθ
SVM 数学模型
是一个典型的带约束条件的凸优化问题, 目标函数就是最大化**margin ** =2||w||22, 也就是 最小化 ||w||.
minw,b 12||w||2s.t. yi(wtxi+b)>=1, i=1,2,..n
优化说明
- 1/2 的作用是为了后面求导后, 形式美观, 没什么作用
- 约束(上下界考虑): yi = 1或 -1, 当 yi>=1, 则要求 wtx+b>=1; 当 yi<= -1 则 wtx+b<=−1
- 判断(工作原理): 对于每个样本点, 带入wtx+b的值>=1, 都在边界"上方" 的意思. 或者 <= -1 也是同样道理, 只关注 yi 值的正负号
这样如果满足约束, 则我们就构造好了 svm 关于 margin 最大 的优化目标函数了.
将约束条件写为标准形式(:
gi(w)=−yi(wtxi+b)+1<=0
为了转为 dual 的问题, 引入拉格朗日函数:
L(w,b,a)=12||w||2−∑ni=1ai[yi(wtxi+b)−1] 这是比较标准的svm Lagrange写法啦
于是要构造dual 问题(只关于a的问题), 对于 L(w,b,a), 我们先优化 w, b , 最后再来整 a, 即先对 w, b 求梯度, 令其等于0.
对 w 求梯度(偏导)=0:
∇w L(w,b,a)=w−∑ni=1aiyixi=0即:w=∑ni=1aiyixi
同样对 b 求梯度(偏导) = 0:
∇bL(w,b,a)=−∑ni=1aiyi=0即:跟 b好像没啥关系趴
这显然符合我们的设定, b 表示偏置嘛, 然后将 w=∑ni=1aiyixi代入拉个朗日函数可得:
L(w,b,a)=(12∑ni=1aiyixi)(∑nj=1ajyjxj)−∑ni=1aiyi∑nj=1aj,yjxjxi−b∑ni=1aiyi+∑ni=1ai
由 ∑ni=1aiyi=0 可简化为:
=∑ni=1ai−12(∑ni=1aiyixi)(∑nj=1ajyjxj)
=∑ni=1ai−12∑ni=1∑nj=1yiyjaiaj<xi,xj>
<xixj> 表示内积, 即 xTixj, 实际意义是每个样本都要与其余样本进行点积运算
优化了w之后, 于是对应的 dual 问题即:
再补充一波 KKT 4个条件
-
拉格不动性: ∇xL(x′,a,β)=0
-
原始可行性: gi(x′)<=0; hi(x)=0
-
对偶可行性: ai>=0
-
互补松弛性: aigi(x′)=0
maxa f0(a)=∑ni=1ai−12∑ni,j=1yiyjaiaj<xi,xj>s.t.
ai>=0, i=1,2,...n∑ni=1aiyi=0
SVM 的决策算子, 值的正负号表示类别:
wTxnew+b=(∑ni=iaiyixi)Txi+b
=∑ni=1aiyi<xixnew>+b
aiyi 是一个实数, 可以提出来
小结
线性的svm推导大致便如上了. 最为关键要点在于目标函数及其Lagrange形式
关于margin
(wTx1+b=1)−(wTx2+b)=2
关于目标函数:
minw,b 12||w||2s.t. yi(wtxi+b)>=1, i=1,2,..n
关于Lagrange
L(w,a,b)==∑ni=1ai−12∑ni=1∑nj=1yiyjaiaj<xi,xj>
why i, j ?
辛辛苦苦推导了大半天, 目的就是将目标函数, 转化为了只关于a 的函数
像后面的 带松弛变量和核函数, 及求解a的SMO算法, 这些都是要用到的哦.
耐心和恒心, 总会获得回报的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通