Dual SVM (对偶支持向量机)
来源:互联网 发布:网络攻击的位置 编辑:程序博客网 时间:2024/05/18 12:02
1. SVM 目标函数及约束条件
SVM 的介绍及数学推导参考:我的CSDN,此处直接跳过,直接给出 SVM 的目标函数和约束条件:
2. 拉格朗日乘子形式
利用拉格朗日乘子法可以将 1 中的有约束问题转化为无约束问题,如下所示:
此时的目标函数变为:
对于不好的
对于好的
3. 对偶形式
假设
假设
则满足:
因为值域有重叠时,最大值中的最小值比最小值中的最大值要大,如下图所示:
因为
对于二次规划问题,如果满足下述条件,则两个问题等价,构成强对偶关系。
1. 凸问题
2. 有解
3. 线性条件
因此,求解
4. 求解
- 令
∂L(w,b)∂b=0=∑Nn=1αnyn ,得:∑Nn=1αnyn=0 - 把上式带入
L(w,b,α) 得:maxαn>0⎛⎝⎜⎜⎜minw12wTw+∑Nn=1αn(1−ynwTxn)L(w,b)⎞⎠⎟⎟⎟ - 令
∂L(w)∂w=0=wi−∑Nn=1αnwTxn,i ,得:w=∑Nn=1αnynxn - 把上式带入
L(w) ,得:maxαn>0(−12||∑Nn=1αnynxn||2+∑Nn=1αn) - max -> min
minαn>0(12||∑Nn=1αnynxn||2−∑Nn=1αn) - 标准对偶 SVM
minαn>0(12∑Nn=1∑Nm=1αnαmynymxTnxm||−∑Nn=1αn)s.t.∑Nn=1αnyn=0αn=0,n=1,2,...,n - 转化为二次规划问题
α←QP(Q,p,A,c)minu12αTQα+pTαs.t.aTmα≥cm,m=1,2,...,M
8. 求解 b,w
matlab 中的 quadprog 函数可用于求解该问题。
5. 问题
在第4部份中第7步的二次规划问题中,
由于
w=∑Nn=1αnynxn ,在非支持向量处αn=0 ,也就是说w 只与支持向量有关,所以预测函数
h(x)=sign(wTx+b) 只与支持向量有关。而直接的 SVM 不具有这样的性质。所谓的支持向量就是:离分隔超平面最近的那些点,就是在第6部份标出的那些点。
6. 示例
% 功能:演示对偶SVM算法% 时间:2015-07-12clcclear allclose all%% 测试样本dataLength = 2;dataNumber = [100, 100];% 第一类x1 = randn(dataLength, dataNumber(1));y1 = ones(1, dataNumber(1));% 第二类x2 = 5 + randn(dataLength, dataNumber(2));y2 = -ones(1, dataNumber(2));% 显示figure(1);plot(x1(1,:), x1(2,:), 'bx', x2(1,:), x2(2,:), 'k.');axis([-3 8 -3 8]);title('SVM')hold on% 合并样本X = [x1, x2]; Y = [y1, y2]; % 打乱样本顺序index = randperm(sum(dataNumber));X(:, index) = X;Y(:, index) = Y;%% SVM 训练% line : w1x1 + w2x2 + b = 0% weight = [b, w1, w2]weight = dualSvmTrainMine(X, Y);%% 测试输出% y = kx + bk = -weight(2) / weight(3);b = weight(1) / weight(3);xLine = -2:0.1:7;yLine = k .* xLine - b;plot(xLine, yLine, 'r')hold on%% 查找支持向量epsilon = 1e-5;dist = abs(k .* X(1, :) - X(2,:) - b);i_sv = find(dist <= min(dist(:)) + epsilon); plot(X(1,i_sv), X(2,i_sv),'ro');
Dual SVM 结果:
SVM 和 Dual SVM 结果:
从上图可以看出,SVM 和 Dual SVM 的结果是一致的。
7. 完整代码
GitHub
8. 参考
- 《视觉机器学习20讲》第九讲
- 《Coursera 机器学习技法(林轩田 - 台湾大学 》02 Dual Support Vector Machine
- Dual SVM (对偶支持向量机)
- 林轩田--机器学习技法--SVM笔记2--对偶支持向量机(dual+SVM)
- 支持向量机SVM中的对偶问题
- SVM——对偶支持向量机
- SVM支持向量机-拉格朗日,对偶算法的初解
- SVM支持向量机-拉格朗日,对偶算法的初解
- SVM支持向量机-拉格朗日,对偶算法的初解
- 支持向量机(SVM)(二)----对偶
- 支持向量机(SVM)与其理论发展(2):对偶学习
- 支持向量机(SVM)中对偶问题的理解
- SVM-支持向量机学习(2):线性可分SVM的对偶型
- 支持向量机(SVM)(二)-- 拉格朗日对偶(Lagrange duality)
- 学习笔记——支持向量机svm(2)对偶问题
- 支持向量机(SVM)关键点攻略(最大间隔,对偶问题)
- 拉格朗日对偶性算法以及在SVM支持向量机中的应用
- 支持向量机(SVM)必备知识(KKT、slater、对偶)
- 支持向量机SVM 原理、推导与Matlab实现(2)-对偶问题
- 支持向量机SVM
- 【Cocos游戏实战】功夫小子第六课之游戏主功能场景的分析和实现
- 史上最全的程序员求职渠道总结
- JNI常见报错及解决方案汇总
- Html 语法学习笔记二
- 换零钱---编程马拉松
- Dual SVM (对偶支持向量机)
- 【版本控制】如何从github 上获取源码
- Learn python the hard way 2nd 学习过程中的问题记录
- Java的多态
- Android应用被killed时,Service不被一起kill的方法
- [开发工具]_[VS2010]_[vs2010的一个bug-使用stringstream时出现]
- JavaFX打包到Android上
- who命令、whoami命令和who am i命令的区别
- 分组密码算法