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

数据结构

开发平台:

Matlab

  1. function [K] = kernel(ker,x,y)
  2. % Calculate kernel function.   
  3. %
  4. % x: 输入样本,d×n1的矩阵,n1为样本个数,d为样本维数
  5. % y: 输入样本,d×n2的矩阵,n2为样本个数,d为样本维数
  6. %
  7. % ker  核参数(结构体变量)
  8. % the following fields:
  9. %   type   - linear :  k(x,y) = x'*y
  10. %            poly   :  k(x,y) = (x'*y+c)^d
  11. %            gauss  :  k(x,y) = exp(-0.5*(norm(x-y)/s)^2)
  12. %            tanh   :  k(x,y) = tanh(g*x'*y+c)
  13. %   degree - Degree d of polynomial kernel (positive scalar).
  14. %   offset - Offset c of polynomial and tanh kernel (scalar, negative for tanh).
  15. %   width  - Width s of Gauss kernel (positive scalar).
  16. %   gamma  - Slope g of the tanh kernel (positive scalar).
  17. %
  18. % ker = struct('type','linear');
  19. % ker = struct('type','ploy','degree',d,'offset',c);
  20. % ker = struct('type','gauss','width',s);
  21. % ker = struct('type','tanh','gamma',g,'offset',c);
  22. %
  23. % K: 输出核参数,n1×n2的矩阵
  24. %-------------------------------------------------------------%
  25. switch ker.type
  26.     case 'linear'
  27.         K = x'*y;
  28.     case 'ploy'
  29.         d = ker.degree;
  30.         c = ker.offset;
  31.         K = (x'*y+c).^d;
  32.     case 'gauss'
  33.         
  34.         s = ker.width;
  35.         rows = size(x,2);
  36.         cols = size(y,2);   
  37.         tmp = zeros(rows,cols);
  38.         for i = 1:rows
  39.             for j = 1:cols
  40.                 tmp(i,j) = norm(x(:,i)-y(:,j));
  41.             end
  42.         end        
  43.         K = exp(-0.5*(tmp/s).^2);
  44.     case 'tanh'
  45.         g = ker.gamma;
  46.         c = ker.offset;
  47.         K = tanh(g*x'*y+c);
  48.     otherwise
  49.         K = 0;
  50. end