⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svmlusex01.m

📁 数据挖掘的新方法-支持向量机书中算法例子
💻 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 + -