SVM整理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,lstip 3: 有个关于soft margin的盒子条件,我不太明白是干嘛的,谁懂得话,就给我讲讲哈tip 4: 画出来的图很难看to sum up: 挺好的1.2较早使用的工具箱SVM and Kernel Methods Matlab Toolbox2005年法国人写的,最近的更新为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本文来自: 高校自动化网() 详细出处参考(转载请保留本链接):/html/matlab/15830.html业界很有名的一个包,主要是有各种各样的借口,现在最新的到python主页及下载地址:.tw/~cjlin/libsvm/但是,说实话呢,我真是用的不怎么上手首先,实在是不怎么好篡改其次,参数调起来挺麻烦。
但是有很详细的guide book 和例子且主页上的例子很生动,随便点几下,就可以看到分类器产生的过程和效果。
业界用的非常多,应该svm在应用领域影响力最大的一个包了据说(according to 诺,井博士)linux下非常非常好使。
1.4 osu-svm matlab toolbox下载地址:/projects/svm/觉得和libsvm没什么太大的差别有多分类且可以生成个阶梯图,我觉得这种图要比普通的分类平面图好些,好像可以看到更多的信息。
、1.5 spider machine learning matlab toolbox主页:/projects/svm/那个是相当cool~啊包括了迄今为止较为常用的machine learning algorithms还有无监督的一些算法,如谱聚类我研究了一小下,不太好篡改,但是很好用,我做多分类是就用了这个包,效果不好,但是挺好调整本文来自: 高校自动化网() 详细出处参考(转载请保留本链接):/html/matlab/15830_2.html1.6 svc(注意版本)包已经解压到文件夹F:\R2009b\toolbox\svmmatlab中SVM工具箱的使用方法1,下载SVM工具箱:/faculty/chzheng/bishe/indexfiles/indexl.htm2,安装到matlab文件夹中1)将下载的SVM工具箱的文件夹放在\matlab71\toolbox\下2)打开matlab->File->Set Path中添加SVM工具箱的文件夹现在,就成功的添加成功了.可以测试一下:在matlab中输入which svcoutput 回车,如果可以正确显示路径,就证明添加成功了,例如:C:\Program Files\MATLAB71\toolbox\svm\svcoutput.m3,用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 p2p1=3;p2=1;然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示:Support Vector Classification_____________________________Constructing ...Optimising ...Execution time: 1.9 secondsStatus : OPTIMAL_SOLUTION|w0|^2 : 0.418414Margin : 3.091912Sum alpha : 0.418414Support Vectors : 3 (3.0%)nsv =3alpha =0.00000.00000.00000.00000.00002)输入预测函数,可以得到与预想的分类结果进行比较.输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到:predictedY =1111111113)画图输入:svcplot(X,Y,ker,alpha,bias),回车补充:X和Y为数据,m*n:m为样本数,n为特征向量数比如:取20组训练数据X,10组有故障,10组无故障的,每个训练数据有13个特征参数,则m=20,n=13Y为20*1的矩阵,其中,10组为1,10组为-1.对于测试数据中,如果取6组测试数据,3组有故障,3组无故障的,则m=6,n=13Y中,m=6,n=1/SVM_soft.html2 原理详解2.1 SVM.ppt2.2 陆振波的SVM的MATLAB代码的解释%构造训练样本n = 50;randn('state',6);x1 = randn(2,n); %2行N列矩阵y1 = ones(1,n); %1*N个1x2 = 5+randn(2,n); %2*N矩阵y2 = -ones(1,n); %1*N个-1figure;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是用来控制算法的选项参数的向量rgeScale = 'off';options.Display = 'off';switch svmTypecase '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 乘子%支持向量机的数学表达式:()()Cy st X X K y y W i i li i j i j i j lj i i li i ≤≤=+-=∑∑∑===αααααα00:,21min 11,1(i=1 to L)Quadprog 函数:cx Hx x T+21minSt:()()()有界约束等式约束不等式约束UB x LB b x A b Ax ≤≤=≤11 因此,H = (Y'*Y).*kernel(ker,X,X)支持向量机的数学表达式中的最优解为T l),...,(***1ααα=,∑==li ii i x y W 1**α,)2/()*(*1*1*∑∑==-=i y i li i i x W B αα%寻找支持向量 a = svm.a;epsilon = 1e-8;i_sv = find(abs(a)>epsilon); %0<a<a(max)则认为x 为支持向量 plot(X(1,i_sv),X(2,i_sv),'ro');%构造测试数本[x1,x2] = meshgrid(-2:0.05:7,-2:0.05:7); %x1和x2都是181*181的矩阵 [rows,cols] = size(x1); %M=size(x1,1):返回x 数组的行数181 %N=size(x1,2):返回x 数组的列数181nt = rows*cols; Xt = [reshape(x1,1,nt);reshape(x2,1,nt)];%reshape(x1,1,nt)是将x1转成1*(181*181)的矩阵;所以Xt 是一个2*(181*181)的矩阵%测试输出tmp = (a.*Y)*kernel(ker,X,X(:,i_sv)); %∑==li i i i x X K y a tmp 1*),(b = 1./Y(i_sv)-tmp;b = mean(b); %∑=-=li j i i i x x K yi y b 1*),(αtmp = (a.*Y)*kernel(ker,X,Xt); %∑==li i i i x X K y a tmp 1*),( Xt 是要进行判别Yd = sign(tmp+b); %}),(sgn{)(1*∑=+=li i i i b X x K a y x f%分界面Yd = reshape(Yd,rows,cols)contour(x1,x2,Yd,[0 0],'m'); % Contour 函数:曲面的等高线图2.3 svm自己实现在当前数据挖掘和机器学习领域,最为热门的话题莫过于SVM和Boosting方法了。