svcplot.m
上传用户:xfjled
上传日期:2007-05-06
资源大小:150k
文件大小:3k
源码类别:

matlab例程

开发平台:

Matlab

  1. function [h] = svcplot(X,Y,ker,alpha,bias,aspect,mag,xaxis,yaxis,input)
  2. %SVCPLOT Support Vector Machine Plotting routine
  3. %
  4. %  Usage: svcplot(X,Y,ker,alpha,bias,zoom,xaxis,yaxis,input)
  5. %
  6. %  Parameters: X      - Training inputs
  7. %              Y      - Training targets
  8. %              ker    - kernel function
  9. %              alpha  - Lagrange Multipliers
  10. %              bias   - Bias term 
  11. %              aspect - Aspect Ratio (default: 0 (fixed), 1 (variable))
  12. %              mag    - display magnification 
  13. %              xaxis  - xaxis input (default: 1) 
  14. %              yaxis  - yaxis input (default: 2)
  15. %              input  - vector of input values (default: zeros(no_of_inputs))
  16. %
  17. %  Author: Steve Gunn (srg@ecs.soton.ac.uk)
  18.   if (nargin < 5 | nargin > 10) % check correct number of arguments
  19.     help svcplot
  20.   else
  21.     epsilon = 1e-5;  
  22.     if (nargin < 10) input = zeros(1,size(X,2));, end
  23.     if (nargin < 9) yaxis = 2;, end
  24.     if (nargin < 8) xaxis = 1;, end
  25.     if (nargin < 7) mag = 0.1;, end
  26.     if (nargin < 6) aspect = 0;, end
  27.     
  28.     % Scale the axes
  29.     xmin = min(X(:,xaxis));, xmax = max(X(:,xaxis)); 
  30.     ymin = min(X(:,yaxis));, ymax = max(X(:,yaxis)); 
  31.     xa = (xmax - xmin);, ya = (ymax - ymin);
  32.     if (~aspect)
  33.        if (0.75*abs(xa) < abs(ya)) 
  34.           offadd = 0.5*(ya*4/3 - xa);, 
  35.           xmin = xmin - offadd - mag*0.5*ya;, xmax = xmax + offadd + mag*0.5*ya;
  36.           ymin = ymin - mag*0.5*ya;, ymax = ymax + mag*0.5*ya;
  37.        else
  38.           offadd = 0.5*(xa*3/4 - ya);, 
  39.           xmin = xmin - mag*0.5*xa;, xmax = xmax + mag*0.5*xa;
  40.           ymin = ymin - offadd - mag*0.5*xa;, ymax = ymax + offadd + mag*0.5*xa;
  41.        end
  42.     else
  43.        xmin = xmin - mag*0.5*xa;, xmax = xmax + mag*0.5*xa;
  44.        ymin = ymin - mag*0.5*ya;, ymax = ymax + mag*0.5*ya;
  45.     end
  46.     
  47.     set(gca,'XLim',[xmin xmax],'YLim',[ymin ymax]);  
  48.     % Plot function value
  49.     [x,y] = meshgrid(xmin:(xmax-xmin)/50:xmax,ymin:(ymax-ymin)/50:ymax); 
  50.     z = bias*ones(size(x));
  51.     wh = waitbar(0,'Plotting...');
  52.     for x1 = 1 : size(x,1)
  53.       for y1 = 1 : size(x,2)
  54.         input(xaxis) = x(x1,y1);, input(yaxis) = y(x1,y1);
  55.         for i = 1 : length(Y)
  56.           if (abs(alpha(i)) > epsilon)
  57.          z(x1,y1) = z(x1,y1) + Y(i)*alpha(i)*svkernel(ker,input,X(i,:));
  58.           end
  59.         end
  60.       end
  61.       waitbar((x1)/size(x,1))
  62.     end
  63.     close(wh)
  64.     l = (-min(min(z)) + max(max(z)))/2.0;
  65.     sp = pcolor(x,y,z);
  66.     shading interp  
  67.     set(sp,'LineStyle','none');
  68.     set(gca,'Clim',[-l  l],'Position',[0 0 1 1])
  69.     axis off
  70.     load cmap
  71.     colormap(colmap)
  72.     % Plot Training points
  73.     hold on
  74.     for i = 1:size(Y)
  75.       if (Y(i) == 1)
  76.         h(1) = plot(X(i,xaxis),X(i,yaxis),'b+','LineWidth',4); % Class A
  77.       else
  78.         h(2) = plot(X(i,xaxis),X(i,yaxis),'r+','LineWidth',4); % Class B
  79.       end
  80.       if (abs(alpha(i)) > epsilon)
  81.         plot(X(i,xaxis),X(i,yaxis),'wo') % Support Vector
  82.       end
  83.     end 
  84.     % Plot Boundary contour
  85.     hold on
  86.     contour(x,y,z,[0 0],'w')
  87.     contour(x,y,z,[-1 -1],'w:')
  88.     contour(x,y,z,[1 1],'w:')
  89.     hold off
  90.   end