📄 svmlusex01.m
字号:
%SVMLUSex01.m
%Two Dimension Linear-SVM , Two Class and Unseparable Situation
%
%Method from Christopher J. C. Burges:
%"A Tutorial on Support Vector Machines for Pattern Recognition", page 13/14
%
% Objective: min " f(A) = ||W||^2 + C*sum(ci) " ; p8/line 30
% Subject to: "yi*(W*xi+b)-1+ci>=0", i=1,...,m ; function (40/41/42);
% ci>=0;
%
%The optimizing variables are W=[W(1),W(2),b,ci,c2,...,cm];
%ci > 1 correspondent with a "error" sample which lie in contrary side;
function mm=SVMLUSex01(mm) %mm -- select sample number
C=50;
echo off;
close all;
fclose all;
%Generate Two Set of Data each set with n data
m=mm; % The volume each set
al=pi/4; %
d=0.5; %
x=rand(m,2);
x(1:m,1)=2*x(1:m,1);
x(1:m,2)=x(1:m,2)+d;
X1(1:m,1)=x(1:m,1)*cos(al)-x(1:m,2)*sin(al);
X1(1:m,2)=x(1:m,2)*cos(al)+x(1:m,1)*sin(al);
x=rand(m,2);
x(1:m,1)=2*x(1:m,1);
x(1:m,2)=x(1:m,2);
X2(1:m,1)=x(1:m,1)*cos(al)-x(1:m,2)*sin(al);
X2(1:m,2)=x(1:m,2)*cos(al)+x(1:m,1)*sin(al);
X=[X1;X2]; %X1 is Positive Samples Set and X2 is Negative Samples Set
figure(1);
whitebg(1,[0,0.1,0]);
plot(X1(1:m,1),X1(1:m,2),'c+');
hold on
plot(X2(1:m,1),X2(1:m,2),'m*');
Xa = min(0,min(X(1:2*m,1)));
Xb = max(X(1:2*m,1));
axis([Xa,Xb,min(X(1:2*m,2)),max(X(1:2*m,2))])
asw = 0;
while (asw~=1)&(asw~=2)
asw=input('Continue or no? (1/2)')
end
%%%
if asw==1
%All sample have been contained in matrix X(m*n).
%Here m = m1 + m2 are Positive/Negative samples respectivelye while n is the dimension of the samples.
%
[m,n]=size(X);
m1=m/2; %The number of Positive Samples Set
m2=m/2; %The number of Negative Samples Set
fid=fopen('a.dat','w');
fwrite(fid,[m1,m2,n]);
for k=1:n
fwrite(fid,X(1:m,k),'float');
end
fclose(fid);
%
%Keep to MATLAB prescribe,Here x0 is start point to optimizing;
%
%Set default options=[] indicate that each constrained function is "<=0";
%Return parameter:
% W=[W(i)] is the optimizing variables, discrabed above;
% L=[L(2),L(3),...,L(m+1)] are Lagrange Multipliyers for each constrained function, L(i) = 0 indicates the constraint is active;
x0 = [[1;1;1];0.5*ones(m,1)];
options = [];
[W, options,L] = constr('SVMLUSex01FUN', x0, options);
Ya = -Xa*W(1)/W(2) - W(3)/W(2);
Yb = -Xb*W(1)/W(2) - W(3)/W(2);
plot([Xa,Xb],[Ya,Yb],'y')
%Take a sign on the point which corresponds to ci>1;
for n=4:m+3,
if W(n)>=1,
plot(X(n-3,1),X(n-3,2),'yo');
end
end
delete('a.dat');
end
%%% if
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -