SVM-非线性支持向量机及SMO算法
SVM-非线性支持向量机及SMO算法
如果您想体验更好的阅读:请戳这里littlefish.top
线性不可分情况
线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,为了满足函数间隔大于1的约束条件,可以对每个样本(xi,yi)引进一个松弛变量ξi≥0,使函数间隔加上松弛变量大于等于1,,
yi(w⋅xi+b)≥1−ξi
目标函数变为
12||w||2+CN∑j=1ξi
其中,C>0称为惩罚参数,值越大对误分类的惩罚越大,值越小对误分类的惩罚越小。
因此,最小化目标函数也就是使12||w||2尽量小(间隔尽量大),同时使误分类点的个数尽量小。
线性不可分的线性支持向量机的学习问题变成如下凸二次规划问题:
minw,b,ξ12||w||2+CN∑i=1ξi s.t.yi(w⋅xi+b)≥1−ξi,i=1,2,...,N,ξi≥0,i=1,2,...,N
线性支持向量学习算法
- 选择惩罚参数C>0,构造并求解凸二次规划问题
minα12N∑i=1N∑j=1αiαjyiyj(xi⋅xj)−N∑i=1αi s.t.N∑i=1αiyi=0 0≤αi≤C,i=1,2,...,N
求得最优解$\alpha*=(\alpha_1*, \alpha_2^*, ... , \alpha_N*)T$
- 计算$w*=\sum_{i=1}N \alpha_i^* y_i x_i$
选择$\alpha*的一个分量\alpha_j*适合条件0<\alpha_j^*<C$,计算
b∗=yi−N∑i=1yiα∗i(xi⋅xj)
- 求得分离超平面
w∗⋅x+b∗=0
分类决策函数:
f(x)=sign(w∗⋅x+b∗)
核函数
用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。
核技巧应用在支持向量机的基本思想:通过一个非线性变换将输入空间(欧式空间$Rn或离散集合)对应于一个特征空间(希尔伯特空间H),使得在输入空间Rn$中的超曲面模型对应于特征空间H中的超平面模型(支持向量机)。
非线性支持向量分类机
非线性支持向量机
从非线性分类训练集,通过核函数与间隔最大化或凸二次规划,学习得到的分类决策函数:
f(x)=sign(N∑i=1α∗iyiK(x,xi)+b∗)
称为非线性支持向量,K(x,z)是正定核函数。
学习算法
- 选择适当的核函数K(x,z)和适当的参数C,构造并求解最优化问题
minα12N∑i=1N∑j=1αiαjyiyjK(xi,xj)−N∑i=1αi s.t.N∑i=1αiyi=0,0<αi<C,i=1,2,...,N
求解最优解$\alpha*=(\alpha_1*, \alpha_2*,...,\alpha_N*)$
- 选择$\alpha*的第一个正分量0<\alpha_j*<C$,计算
b∗=yi−N∑i=1α∗iyiK(xi⋅xj)
- 构造决策函数
f(x)=sign(N∑i=1α∗iyiK(x⋅xi)+b∗)
序列最小优化算法
SMO算法是一种启发式算法。如果所有变量都满足KKT条件,那么这个最优化问题就解决了(KKT问题是该最优化问题的充要条件),否则,选择两个变量,固定其他变量,针对这两个变量构造二次规划问题。该方法会使原始二次规划问题的目标函数变小,不断分解自问题并对子问题求解进而达到求解原问题的目的。
由于
N∑i=1αiyi=0
所以
αi=−1yiN∑i=2αiyi
两个变量的二次规划求解
假设选择两个变量α1,α2,
minα1α2=12K11α21+12K22α22+y1y2K12α1α2 (α1+α2)+y1α1N∑i=3yiαiKi1+y2α2N∑i=3yiαiK12 s.t.α1y1+α2y2=−N∑i=3yiαi=ξ 0≤αi≤C,i=1,2
由于只有两个变量(αi,αj),因此根据两变量的符号情况约束条件可用二位空间中的图表示(参考α1y1+α2y2=ξ(常数)),
L和H是α取值的最小和最大值,如果yi!=yj,则
L=max(0,α2−α1),H=min(C,C+α2−α1)
如果yi=yj,则
L=max(0,α2+α1+C),H=min(C,α2+α1)
令
g(x)=N∑i=1αiyiK(xi,x)+b
得到误差值:
Ei=g(xi)−yi=(N∑i=1αiyiK(xi,x)+b)−yi$,i=1,2
此最优问题的解是:
αnew2=αold2+y2(E1−E2)η
其中,
η=K11+K22−2K12=||ϕ(x1)−ϕ(x2)||2
ϕ(x)为输入空间到特征空间的映射,经过剪辑后是
f(n)={H,αnew2>H αnew2,L≤αnew2≤H L,αnew2<L
则αnew1为
αnew1=αold1+y1y2(αold2−αnew2)
变量的选择方法
SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件的。
1.第1个变量的选择
SMO算法在外层循环中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量,KKT条件如下
αi=0<=>yig(xi)≥1 0<αi<C<=>yig(xi)=1 αi=C<=>yig(xi)≤1
其中,g(xi)=∑Nj=1αjyjK(xi,xj)+b。
该检验在ϵ范围内进行的,在校验过程中,外层循环首先遍历所有满足条件0<αi<C的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。
2.第2个变量的选择
SMO算法在内层循环,假设在外层循环中已经找到第一个变量α1,现在要在内层循环中找到第2个变量α2,第2个变量选择的标准是希望能使α2有足够的变化。根据上一节可知,αnew2是依赖|E1−E2|的,为了加快计算速度,最简单的做法是选择|E1−E2|最大的(如果E1为负值,则选择最大的Ei作为E2,否则选择最小的Ei为E2,需要保存所有的Ei)。
3.计算阈值b和差值Ei
在每次完成两个变量优化后,都要重新计算阈值b。
由KKT条件得
N∑i=1αiyiKi1+b=yi
从而
bnew1=y1−N∑i=3αiyiKi1−αnew1y1K11−αnew2y2K21
由于Ei=g(xi)−yi=(∑Ni=1αiyiK(xi,x)+b)−yi, \quad i = 1,2$,则
E1=g(x1)−y1=N∑i=3αiyiKi1+αold1y1K11+αold2y2K21+bold−y1
将上式中的yi−∑Ni=3αiyiKi1代入bnew1的公式中,得到
bnew1=−E1−y1K11(αnew1−αold1)−y2K21(αnew2−αold2)+bold
对于b的取值:
$$b{new}=\begin{cases}b_1=b_2^{new}, \quad 0 < \alpha_i^{new} < C, i =1,2 \
\frac {b_1^{new} + b_2^{new}} 2,\quad \alpha_i^{new} == 0 or C,满足KKT条件\end{cases}$$
本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2013-06-20 Server Develop (六) Linux epoll总结