【数学建模】支持向量机代码

来源:互联网 发布:淘宝手机回收靠谱吗 编辑:程序博客网 时间:2024/05/22 03:09

支持向量机

使用条件

线性可分的数据下进行分类

MATLAB代码

首先由于版本原因要将svc.m进行一些修改(原版svc.m基于老版本MATLAB),需要将60行附近的

[alpha lambda how] =qp(H, c, A, b, vlb, vub, x0, neqcstr);

替换成

[alpha lambda how] = quadprog(H, c, A, b,[],[], vlb, vub, x0); 

注意输入参数不能有neqcstr(原因未知,后果位置)否则会报错。

接下来随机生成线性可分的数据

N =100;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';C=Inf;ker='linear';global p1 p2p1=3;p2=1;

生成数据如图
生成数据
然后运行以下命令执行SVM训练操作

[nsv alpha bias] = svc(X,Y,ker,C)

输出(详细说明见注释)

Execution time:  0.6 secondsStatus : |w0|^2    : 0.781879Margin    : 2.261832Sum alpha : 0.781878Support Vectors : 3 (1.5%)nsv =     3%支持向量的个数alpha =    0.0000    0.0000    0.14610.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.24480.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.39090.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000    0.0000%非0的3个alpha即为有效向量参数bias =    3.1826%分类面参数bias

输入(必须先进行SVM训练)

svcplot(X,Y,ker,alpha,bias)

输出
分类图像

0 0
原创粉丝点击