1各种svm程序包
1.1 matlab高级版本中自带的svm函数
我现在使用的matlab版本为 matlab 7.6.0(R2008a)这个版本中已经自带svm算法,分别为生物信息工具箱(bioinformatics toolbox)中svmclassify函数和svmtrain函数,为上下级关系。
SVMStruct=svmtrain(Training,Group)%svmtrain的输入为样本点training和样本的分类情况group,输出为一个分类器svmstruct.
核函数,核参数,和计算方法等都是可选的,如SVMStruct = svmtrain(…, ‘Kernel_Function’, Kernel_FunctionValue, …)
但是切记切记一定要成对出现。
然后,将分类器和testing sample带入svmclassify中,可以得到分类结果和准确度。
举个例子
svmStruct=svmtrain(data(train,:),groups(train),’Kernel_Function’,'rbf’,'Kernel_FunctionValue’,’5′,’showplot’,true);
%用了核宽为5的径向基核,且要求作图
%这里我觉得原作者的写法有误,应该是svmStruct = svmtrain(data(train,:),groups(train),... 'Kernel_Function','rbf','RBF_Sigma',5,'showplot',true); classes = svmclassify(svmStruct,data(test,:),’showplot’,true); %要求输出检测样本点的分类结果,且画图表示。
tip 1: 有归一化scale功能,可以通过调参数实现 tip 2: 计算方法可选qp,smo,ls
tip 3: 有个关于soft margin的盒子条件,我不太明白是干嘛的,谁懂得话,就给我讲讲哈 tip 4: 画出来的图很难看 to sum up: 挺好的
1.2较早使用的工具箱SVM and Kernel Methods Matlab Toolbox
2005年法国人写的,最近的更新为20/02/2008
下载的地址为http://asi.insa-rouen.fr/enseignants/~arakotom/toolbox/index.html
这是我最早开始用的一个工具箱,我很喜欢,到现在还是,对于svm的初学者是个很好的toolbox.
有详细的说明和很多的demo和例子,
包含现今几乎所有的有关svm的成熟算法和数据预处理方法(pca及小波等)。 最最重要的是有回归!!! 且函数简单,容易改动延伸。
最近我在弄模糊支持向量机,弄不出来,折腾的快死人了,那天突然发现其实在这个包的一个程序中改动下就可以达到模糊的效果了,开心啊。。。
且有多分类
且画出来的图好看。 强烈推荐
说下包中最重要的几个函数 svmreg svmclass svmval
其中,svmreg和svmclass的功能分别为训练出回归函数和分类器 Svmval将回归函数或分类器带入,对新样本点进行估计
1.3最富盛名的libsvm
本文来自: 高校自动化网(Www.zdh1909.com) 详细出处参考(转载请保留本链接):http://www.zdh1909.com/html/matlab/15830.html
业界很有名的一个包,主要是有各种各样的借口,现在最新的到python
主页及下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
但是,说实话呢,我真是用的不怎么上手 首先,实在是不怎么好篡改 其次,参数调起来挺麻烦。
但是有很详细的guide book 和例子
且主页上的例子很生动,随便点几下,就可以看到分类器产生的过程和效果。 业界用的非常多,应该svm在应用领域影响力最大的一个包了 据说(according to 诺,井博士)linux下非常非常好使。
1.4 osu-svm matlab toolbox
下载地址:http://sourceforge.net/projects/svm/
觉得和libsvm没什么太大的差别 有多分类且可以生成个阶梯图,我觉得这种图要比普通的分类平面图好些,好像可以看到更多的信息。、
1.5 spider machine learning matlab toolbox
主页:http://sourceforge.net/projects/svm/
那个是相当cool~啊
包括了迄今为止较为常用的machine learning algorithms 还有无监督的一些算法,如谱聚类
我研究了一小下,不太好篡改,但是很好用,我做多分类是就用了这个包,效果不好,但是挺好调整
本文来自: 高校自动化网(Www.zdh1909.com) 详细出处参考(转载请保留本链接):
http://www.zdh1909.com/html/matlab/15830_2.html
1.6 svc(注意版本)
包已经解压到文件夹F:\\R2009b\oolbox\\svm matlab中SVM工具箱的使用方法
1,下载SVM工具箱:http://see.xidian.edu.cn/faculty/chzheng/bishe/indexfiles/indexl.htm 2,安装到matlab文件夹中
1)将下载的SVM工具箱的文件夹放在\\matlab71\oolbox\\下 2)打开matlab->File->Set Path中添加SVM工具箱的文件夹 现在,就成功的添加成功了.
可以测试一下:在matlab中输入which svcoutput 回车,如果可以正确显示路径,就证明添加成功了,例如:
C:\\Program Files\\MATLAB71\oolbox\\svm\\svcoutput.m 3,用SVM做分类的使用方法
1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2 我做的测试中取的数据为:
N = 50; n=2*N;
randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure;
plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([-3 8 -3 8]); title('C-SVC') hold on;
X1 = [x1,x2]; Y1 = [y1,y2]; X=X1'; Y=Y1';
其中,X是100*2的矩阵,Y是100*1的矩阵
C=Inf;
ker='linear'; global p1 p2 p1=3; p2=1;
然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示:
Support Vector Classification
_____________________________ Constructing ... Optimising ...
Execution time: 1.9 seconds Status : OPTIMAL_SOLUTION |w0|^2 : 0.418414 Margin : 3.091912 Sum alpha : 0.418414
Support Vectors : 3 (3.0%) nsv = 3
alpha =
0.0000 0.0000 0.0000 0.0000 0.0000
2)输入预测函数,可以得到与预想的分类结果进行比较.
输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到:
predictedY = 1 1 1 1 1 1 1 1 1
3)画图
输入:svcplot(X,Y,ker,alpha,bias),回车
补充:
X和Y为数据,m*n:m为样本数,n为特征向量数
比如:取20组训练数据X,10组有故障,10组无故障的,每个训练数据有13个特征参数,则m=20,n=13
Y为20*1的矩阵,其中,10组为1,10组为-1.
对于测试数据中,如果取6组测试数据,3组有故障,3组无故障的,则m=6,n=13 Y中,m=6,n=1
http://www.support-vector-machines.org/SVM_soft.html
2 原理详解
2.1 SVM.ppt
2.2 陆振波的SVM的MATLAB代码的解释
%构造训练样本
n = 50;
randn('state',6);
x1 = randn(2,n); %2行N列矩阵 y1 = ones(1,n); %1*N个1 x2 = 5+randn(2,n); %2*N矩阵 y2 = -ones(1,n); %1*N个-1
figure;
plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');
%x1(1,:)为x1的第一行,x1(2,:)为x1的第二行 axis([-3 8 -3 8]); title('C-SVC') hold on;
X = [x1,x2]; %训练样本d*n矩阵,n为样本个数,d为特征向量个数 Y = [y1,y2]; %训练目标1*n矩阵,n为样本个数,值为+1或-1
%训练支持向量机
function svm = svmTrain(svmType,X,Y,ker,p1,p2)
options = optimset; % Options是用来控制算法的选项参数的向量 options.LargeScale = 'off'; options.Display = 'off';
switch svmType case 'svc_c',
C = p1;
n = length(Y);
H = (Y'*Y).*kernel(ker,X,X);
f = -ones(n,1); %f为1*n个-1,f相当于Quadprog函数中的c A = []; b = [];
Aeq = Y; %相当于Quadprog函数中的A1,b1 beq = 0;
lb = zeros(n,1); %相当于Quadprog函数中的LB,UB ub = C*ones(n,1);
a0 = zeros(n,1); % a0是解的初始近似值
[a,fval,eXitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options); %a是输出变量,它是问题的解
% Fval是目标函数在解a 处的值 % Exitflag>0,则程序收敛于解x Exitflag=0,则函数的计算达到了最大次数 Exitflag<0,则问题无可行解,或程序运行失败
% Output 输出程序运行的某些信息 %Lambda为在解a处的值Lagrange乘子
%支持向量机的数学表达式:
1lminWiyiyjijKXi,Xj2i,j1i1st:yii0i1ll0iC(i=1 to L)
Quadprog函数:
min1TxHxcx2
Axb不等式约束A1xb1等式约束St:LBxUB有界约束 因此,H = (Y'*Y).*kernel(ker,X,X)
支持向量机的数学表达式中的最优解为
*(,...,)*1*Tl,
W*i*yixii1l,
B*(W*i*xi)/(2i*)i1yi1l
%寻找支持向量 a = svm.a;
epsilon = 1e-8;