Main_SVC_Nu.m
上传用户:bixinwl
上传日期:2015-03-02
资源大小:227k
文件大小:3k
源码类别:

数据结构

开发平台:

Matlab

  1. % 支持向量机Matlab工具箱1.0 - Nu-SVC, Nu二类分类算法
  2. % 使用平台 - Matlab6.5 
  3. % 版权所有:陆振波,海军工程大学
  4. % 电子邮件:luzhenbo@yahoo.com.cn
  5. % 个人主页:http://luzhenbo.88uu.com.cn
  6. % 参数文献:Chih-Chung Chang, Chih-Jen Lin. "LIBSVM: a Library for Support Vector Machines"
  7. %
  8. % Support Vector Machine Matlab Toolbox 1.0 - Nu Support Vector Classification
  9. % Platform : Matlab6.5 / Matlab7.0
  10. % Copyright : LU Zhen-bo, Navy Engineering University, WuHan, HuBei, P.R.China, 430033  
  11. % E-mail : luzhenbo@yahoo.com.cn        
  12. % Homepage : http://luzhenbo.88uu.com.cn     
  13. % Reference : Chih-Chung Chang, Chih-Jen Lin. "LIBSVM: a Library for Support Vector Machines"
  14. %
  15. % Solve the quadratic programming problem - "quadprog.m"
  16. clc
  17. clear
  18. close all
  19. % ------------------------------------------------------------%
  20. % 定义核函数及相关参数
  21. nu = 0.2;            % nu -> (0,1] 在支持向量数与错分样本数之间进行折衷
  22. ker = struct('type','linear');
  23. %ker = struct('type','ploy','degree',3,'offset',1);
  24. %ker = struct('type','gauss','width',1);
  25. %ker = struct('type','tanh','gamma',1,'offset',0);
  26. % ker - 核参数(结构体变量)
  27. % the following fields:
  28. %   type   - linear :  k(x,y) = x'*y
  29. %            poly   :  k(x,y) = (x'*y+c)^d
  30. %            gauss  :  k(x,y) = exp(-0.5*(norm(x-y)/s)^2)
  31. %            tanh   :  k(x,y) = tanh(g*x'*y+c)
  32. %   degree - Degree d of polynomial kernel (positive scalar).
  33. %   offset - Offset c of polynomial and tanh kernel (scalar, negative for tanh).
  34. %   width  - Width s of Gauss kernel (positive scalar).
  35. %   gamma  - Slope g of the tanh kernel (positive scalar).
  36. % ------------------------------------------------------------%
  37. % 构造两类训练样本
  38. n = 50;
  39. randn('state',6);
  40. x1 = randn(2,n);
  41. y1 = ones(1,n);
  42. x2 = 5+randn(2,n);
  43. y2 = -ones(1,n);
  44. figure;
  45. plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');
  46. axis([-3 8 -3 8]);
  47. title('C-SVC')
  48. hold on;
  49. X = [x1,x2];        % 训练样本,d×n的矩阵,n为样本个数,d为样本维数
  50. Y = [y1,y2];        % 训练目标,1×n的矩阵,n为样本个数,值为+1或-1
  51. % ------------------------------------------------------------%
  52. % 训练支持向量机
  53. tic
  54. svm = svmTrain('svc_nu',X,Y,ker,nu);
  55. t_train = toc
  56. % svm  支持向量机(结构体变量)
  57. % the following fields:
  58. %   type - 支持向量机类型  {'svc_c','svc_nu','svm_one_class','svr_epsilon','svr_nu'}
  59. %   ker - 核参数
  60. %   x - 训练样本,d×n的矩阵,n为样本个数,d为样本维数
  61. %   y - 训练目标,1×n的矩阵,n为样本个数,值为+1或-1
  62. %   a - 拉格朗日乘子,1×n的矩阵
  63. % ------------------------------------------------------------%
  64. % 寻找支持向量
  65. a = svm.a;
  66. epsilon = 1e-8;                     % 如果小于此值则认为是0
  67. i_sv = find(abs(a)>epsilon);        % 支持向量下标
  68. plot(X(1,i_sv),X(2,i_sv),'ro');
  69. % ------------------------------------------------------------%
  70. % 测试输出
  71. [x1,x2] = meshgrid(-2:0.1:7,-2:0.1:7);
  72. [rows,cols] = size(x1);
  73. nt = rows*cols;                  % 测试样本数
  74. Xt = [reshape(x1,1,nt);reshape(x2,1,nt)];
  75. tic
  76. Yd = svmSim(svm,Xt);           % 测试输出
  77. t_sim = toc
  78. Yd = reshape(Yd,rows,cols);
  79. contour(x1,x2,Yd,[0 0],'m');       % 分类面
  80. hold off;