用matlab实现svm分类

用matlab实现svm分类

ID:14598511

大小:26.50 KB

页数:3页

时间:2018-07-29

用matlab实现svm分类_第1页
用matlab实现svm分类_第2页
用matlab实现svm分类_第3页
资源描述:

《用matlab实现svm分类》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在当前数据挖掘和机器学习领域,最为热门的话题莫过于SVM和Boosting方法了。只要是涉及到这两个主题,那么论文就会容易被杂志和会议接受了。看来不管做什么,都讲究眼球效应啊。搞研究其实也有点类似超级女声,呵呵。 以前我的论文中用的SVMCode都来自于台湾的林智仁教授的LibSVM。真的是佩服有些大家,自己做出了重要的发现和成果,想到的不是把自己的成果保密起来(像C4.5一样),让自己独享自己的成果;而是让自己的成果最大程度的被人所利用,给后来的研究人员打下一个坚实的基础。说实话,他的代码很好,用起来很方便,而且不同的语言版本实现都有,即使是对于初学者都很容易掌握

2、。不过用的久了,我就想自己也实现SVM,现在的数学计算工具太多了,而且功能齐全,用起来方便。今天鼓捣了一会,终于用Matlab实现了第一个SVM。虽然比较简单,但是包含了大多数SVM的必要步骤。 这个实现是线性可分支持向量分类机,不考虑非线性分类引入核函数的情况,也不考虑推广条件下引入PenaltyLoss的情况。 问题描述:平面上有如下点A=[11.5;21.5;31.5;41.5;10.5;20.5;30.5;40.5]及其对应的标号flag=[1111-1-1-1-1];用SVM方法构造一个决策函数实现正确分类。 如果我们在二维坐标上描点,就会发现这是个很简单

3、的线性可分问题。实现方法,用SVM的对偶问题,转换为Matlab的有约束非线性规划问题。构建m文件:functionf=ffsvm(x)A=[11.5;21.5;31.5;41.5;10.5;20.5;30.5;40.5];flag=[1111-1-1-1-1];fori=1:1:length(A)    forj=1:1:length(A)        normA(i,j)=A(i,:)*A(j,:)';        normFlag(i,j)=flag(1,i)*flag(1,j);    endendf=0;fori=1:1:length(A)    fo

4、rj=1:1:length(A)       f=f+1/2*(normA(i,j)*x(i)*x(j)*normFlag(i,j));    end    f=f-x(i);end 在命令窗口输入:Aeq=[1111-1-1-1-1];beq=0;lb= [0     0     0     0     0     0     0     0]; 调用MatLab内置优化函数fmincon;[x,favl,exitflag]=fmincon(@ffsvm,x0,[],[],Aeq,beq,lb,[]) 得到如下结果:Optimizationterminatedsu

5、ccessfully: Magnitudeofdirectionalderivativeinsearchdirection  lessthan2*options.TolFunandmaximumconstraintviolation  islessthanoptions.TolConActiveConstraints:     1x=    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000favl=   -2.0000exitflag=     1 x的分量都不为

6、0,说明这些点都是支持向量;计算w;w=[00];fori=1:1:length(A)w=w+flag(i)*x(i)*A(i,:);end结果:w=[0,2]; 计算b; b=0;fori=1:1:8b =b-flag(i)*x(i)*normA(i,1);endb =flag(1)+b;结果:b=-2; 最终的决策函数为:f=sign([0,2]*xT-2)可以验证,这个学习到的决策函数能够对这些平面上的点实现很好的分类; 基本思路是这样的,如果要考虑引入核函数和PenaltyLoss的情况,只需要修改优化函数和约束就可以实现。而且自己可以根据需求任意构造自己的

7、SVM目标函数,然后用Lagrange方法转换为对偶形式,然后当作一个有约束线性规划问题用Matlab来解。至于有约束线性规划问题,这是个大概半个世纪前就解决的问题,学过OR的人都知道它的解决方法。网上也有很多的OpenSource来解决这个问题,直接Call那些代码就可以了。虽然林智仁教授也提供SourceCode,是C++风格的,可读性不是太好。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。