svkernel.m
上传用户:liu_jing
上传日期:2013-07-02
资源大小:4k
文件大小:3k
开发平台:

Matlab

  1. function k = svkernel(ker,u,v)
  2. %SVKERNEL kernel for Support Vector Methods
  3. %
  4. %  Usage: k = svkernel(ker,u,v)
  5. %
  6. %  Parameters: ker - kernel type
  7. %              u,v - kernel arguments
  8. %
  9. %  Values for ker: 'linear'  -
  10. %                  'poly'    - p1 is degree of polynomial
  11. %                  'rbf'     - p1 is width of rbfs (sigma)
  12. %                  'sigmoid' - p1 is scale, p2 is offset
  13. %                  'spline'  -
  14. %                  'bspline' - p1 is degree of bspline
  15. %                  'fourier' - p1 is degree
  16. %                  'erfb'    - p1 is width of rbfs (sigma)
  17. %                  'anova'   - p1 is max order of terms
  18. %              
  19. %  Author: Steve Gunn (srg@ecs.soton.ac.uk)
  20.   if (nargin < 1) % check correct number of arguments
  21.      help svkernel
  22.   else
  23.      
  24.     global p1 p2;
  25.     p1=2.75;p2=0.8;
  26.     % could check for correct number of args in here
  27.     % but will slow things down further
  28.     switch lower(ker)
  29.       case 'linear'
  30.         k = u*v';
  31.       case 'poly'
  32.         k = (u*v' + 1)^p1;
  33.       case 'rbf'
  34.         k = exp(-(u-v)*(u-v)'/(2*p1^2));
  35.       case 'erbf'
  36.         k = exp(-sqrt((u-v)*(u-v)')/(2*p1^2));
  37.       case 'sigmoid'
  38.         k = tanh(p1*u*v'/length(u) + p2);
  39.       case 'fourier'
  40.         z = sin(p1 + 1/2)*2*ones(length(u),1);
  41.         i = find(u-v);
  42.         z(i) = sin(p1 + 1/2)*(u(i)-v(i))./sin((u(i)-v(i))/2);
  43.         k = prod(z);
  44.       case 'spline'
  45.         z = 1 + u.*v + (1/2)*u.*v.*min(u,v) - (1/6)*(min(u,v)).^3;
  46.         k = prod(z);
  47.       case 'bspline'
  48.         z = 0;
  49.         for r = 0: 2*(p1+1)
  50.           z = z + (-1)^r*binomial(2*(p1+1),r)*(max(0,u-v + p1+1 - r)).^(2*p1 + 1);
  51.         end
  52.         k = prod(z);
  53.       case 'anovaspline1'
  54.         z = 1 + u.*v + u.*v.*min(u,v) - ((u+v)/2).*(min(u,v)).^2 + (1/3)*(min(u,v)).^3;
  55.         k = prod(z); 
  56.       case 'anovaspline2'
  57.         z = 1 + u.*v + (u.*v).^2 + (u.*v).^2.*min(u,v) - u.*v.*(u+v).*(min(u,v)).^2 + (1/3)*(u.^2 + 4*u.*v + v.^2).*(min(u,v)).^3 - (1/2)*(u+v).*(min(u,v)).^4 + (1/5)*(min(u,v)).^5;
  58.         k = prod(z);
  59.       case 'anovaspline3'
  60.         z = 1 + u.*v + (u.*v).^2 + (u.*v).^3 + (u.*v).^3.*min(u,v) - (3/2)*(u.*v).^2.*(u+v).*(min(u,v)).^2 + u.*v.*(u.^2 + 3*u.*v + v.^2).*(min(u,v)).^3 - (1/4)*(u.^3 + 9*u.^2.*v + 9*u.*v.^2 + v.^3).*(min(u,v)).^4 + (3/5)*(u.^2 + 3*u.*v + v.^2).*(min(u,v)).^5 - (1/2)*(u+v).*(min(u,v)).^6 + (1/7)*(min(u,v)).^7;
  61.         k = prod(z);
  62.       case 'anovabspline'
  63.         z = 0;
  64.         for r = 0: 2*(p1+1)
  65.           z = z + (-1)^r*binomial(2*(p1+1),r)*(max(0,u-v + p1+1 - r)).^(2*p1 + 1);
  66.         end
  67.         k = prod(1 + z);
  68.       otherwise
  69.         k = u*v';
  70.     end
  71.   end