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

数据结构

开发平台:

Matlab

  1. % 支持向量机Matlab工具箱1.0 - Nu-SVR, 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 Regression
  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. C = 100;                % 拉格朗日乘子上界
  22. nu = 0.05;              % nu -> (0,1] 在支持向量数与拟合精度之间进行折衷
  23. %ker = struct('type','linear');
  24. %ker = struct('type','ploy','degree',3,'offset',1);
  25. ker = struct('type','gauss','width',0.6);
  26. %ker = struct('type','tanh','gamma',1,'offset',0);
  27. % ker - 核参数(结构体变量)
  28. % the following fields:
  29. %   type   - linear :  k(x,y) = x'*y
  30. %            poly   :  k(x,y) = (x'*y+c)^d
  31. %            gauss  :  k(x,y) = exp(-0.5*(norm(x-y)/s)^2)
  32. %            tanh   :  k(x,y) = tanh(g*x'*y+c)
  33. %   degree - Degree d of polynomial kernel (positive scalar).
  34. %   offset - Offset c of polynomial and tanh kernel (scalar, negative for tanh).
  35. %   width  - Width s of Gauss kernel (positive scalar).
  36. %   gamma  - Slope g of the tanh kernel (positive scalar).
  37. % ------------------------------------------------------------%
  38. % 构造两类训练样本
  39. n = 50;
  40. rand('state',42);
  41. X  = linspace(-4,4,n);                            % 训练样本,d×n的矩阵,n为样本个数,d为样本维数,这里d=1
  42. Ys = (1-X+2*X.^2).*exp(-.5*X.^2);
  43. f = 0.2;                                          % 相对误差
  44. Y  = Ys+f*max(abs(Ys))*(2*rand(size(Ys))-1)/2;    % 训练目标,1×n的矩阵,n为样本个数,值为期望输出
  45. figure;
  46. plot(X,Ys,'b-',X,Y,'b*');
  47. title('nu-SVR');
  48. hold on;
  49. % ------------------------------------------------------------%
  50. % 训练支持向量机
  51. tic
  52. svm = svmTrain('svr_nu',X,Y,ker,C,nu);
  53. t_train = toc
  54. % svm  支持向量机(结构体变量)
  55. % the following fields:
  56. %   type - 支持向量机类型  {'svc_c','svc_nu','svm_one_class','svr_epsilon','svr_nu'}
  57. %   ker - 核参数
  58. %   x - 训练样本,d×n的矩阵,n为样本个数,d为样本维数
  59. %   y - 训练目标,1×n的矩阵,n为样本个数
  60. %   a - 拉格朗日乘子,1×n的矩阵
  61. % ------------------------------------------------------------%
  62. % 寻找支持向量
  63. a = svm.a;
  64. epsilon = 1e-8;                     % 如果"绝对值"小于此值则认为是0
  65. i_sv = find(abs(a)>epsilon);        % 支持向量下标,这里对abs(a)进行判定
  66. plot(X(i_sv),Y(i_sv),'ro');
  67. % ------------------------------------------------------------%
  68. % 测试输出
  69. tic
  70. Yd = svmSim(svm,X);           % 测试输出
  71. t_sim = toc
  72. plot(X,Yd,'r--');
  73. hold off;