www.pudn.com > easy_svm.zip > svc_linear.m, change:2012-02-25,size:1789b


%2008年2月29日 
clear all 
clc 
%%========================================================================= 
%定义核函数及相关参数 
C =0.1719; 
ker=struct('type','linear'); 
%%========================================================================= 
%构造训练样本和训练目标 
n = 50; 
% randn('state',2);%选择正态分布数据,线性可分样本点 
x1 = randn(n,2); 
y1 = ones(n,1); 
x2 = 4+randn(n,2); 
y2 = -ones(n,1); 
X = [x1;x2];            % 训练样本,2n×2的矩阵,2n为样本个数,2为样本维数 
Y=[y1;y2]; 
% figure(2) 
% plot(x1(:,1),x1(:,2),'x') 
figure(); 
plot(x1(:,1),x1(:,2),'bx',x2(:,1),x2(:,2),'b.'); 
 
title('二分类svc'); 
hold on; 
% 构造测试样本 
x3 = randn(n,2); 
x4 = 5+randn(n,2); 
Xd = [x3;x4]; 
plot(x3(:,1),x3(:,2),'kx',x4(:,1),x4(:,2),'k.'); 
hold on 
 
 
 
 
%%========================================================================= 
% 训练支持向量机 
tic 
svm = svmTrain('svc_c',X,Y,ker,C);  
% ------------------------------------------------------------% 
% 寻找支持向量 
a = svm.a; 
epsilon = 1e-10;                    % 如果小于此值则认为是0 
i_sv = find(abs(a)>epsilon);        % 支持向量下标 
plot(X(i_sv,1),X(i_sv,2),'ro'); 
hold on 
% ------------------------------------------------------------% 
% % 构造分类超平面 
% [x1,x2] = meshgrid(-5:0.05:6,-5:0.05:6); 
% [rows,cols] = size(x1); 
% nt = rows*cols;                  
% Xt = [reshape(x1,1,nt);reshape(x2,1,nt)]'; 
% Yt = svmSim(svm,Xt); 
% Yt = reshape(Yt,rows,cols); 
% contour(x1,x2,Yt,[0 0],'m');       % 分类面 
% hold off; 
% %-------------------------------------------------------------% 
% % 测试输出 
% Yd = svmSim(svm,Xd);           % 测试输出 
% toc 
%  
% figure() 
% contour(x1,x2,Yt,[0 0],'m'); 
% % figure(4) 
% % plot(X(i_sv,1),X(i_sv,2),'ro'); 
% % figure(5) 
% % contour(x1,x2,Yt,[0 0],'m');