function K = kernelList(kernelName) if strcmp(kernelName, 'linear') %K = @(a,b) linearKernel(a, b); elseif strcmp(kernelName, 'mlp') K = @(a,b,k) mlpKernel(a, b, k(1), k(2)); elseif strcmp(kernelName, 'poly') K = @(a,b,c) polyKernel(a, b, c(1), c(2)); elseif strcmp(kernelName, 'gauss') K = @(a,b, sigma2) gaussKernel(a, b, sigma2); elseif strcmpi(kernelName, 'ratquad') K = @(a,b,c) rationalQuadKernel(a, b, c); else disp('must enter a correct name!') end function k = anovaKernel(a, b, sigma, n, d) %a is m x dim0 %b is n x dim0 (n can equal m) %k is mxn k = zeros(size(a,1), size(b,1)); for k = 1:n for i = 1:size(a,1) for j = 1:size(b,1) k(i,j) = k(i,j) + (exp(-sigma*((a(i,:).^k)-(b(j,:).^k)).^2)).^d; end end end end function k = rationalQuadKernel(a, b, c) %a is m x dim0 %b is n x dim0 %k is mxm k = zeros(size(a,1), size(b,1)); for i = 1:size(a,1) for j = 1:size(b,1) x = a(i,:); y = b(j,:); k(i,j) = 1-(norm(x-y).^2/(norm(x-y).^2+c)); end end end function k = polyKernel(a, b, c, d) %a is m x dim0 %b is n x dim0 %k is mxn k = (a*b' + c).^round(d); end function k = mlpKernel(a, b, k1, k2) %a is m x dim0 %b is n x dim0 %k is mxn %used for ann as well k = tanh(k1*(a*b') + k2); end function k = gaussKernel(a, b, sigma2) %a is m x dim0 %b is n x dim0 %k is mxm k = zeros(size(a,1), size(b,1)); for i = 1:size(a,1) for j = 1:size(b,1) k(i,j) = exp((norm(a(i,:)-b(j,:)).^2)/sigma2); end end end end