📄 bsvkernel.m
字号:
function k = bsvkernel(u,v,kernel,kernelparam)% BSVKERNEL kernel for Support Vector Methods%% Usage: k = svkernel(u,v,kernel kernelparam)%% Parameters: u,v - - input parameters% kernel - kernel type% kernelparam - kernel parameter% %% Values for ker: 'linear' -% 'poly' - kenelparam(1) is degree of polynomial% 'rbf' - kenelparam(1) is width of rbfs (sigma)% 'sigmoid' - kenelparam(1) is scale, p2 is offset% 'spline' -% 'bspline' - kenelparam(1) is degree of bspline% 'fourier' - kenelparam(1) is degree% 'erfb' - kenelparam(1) is width of rbfs (sigma)% 'anova' - kenelparam(1) is max order of terms% if (nargin < 1) % check correct number of arguments help svkernel else p2=-1; % could check for correct number of args in here % but will slow things down further switch lower(kernel) case 'linear' k = sum(u.*v,2) +1; case 'poly' k = (sum(u.*v,2) + 1).^kernelparam(1); case 'rbf' k = exp(-sum((u-v).^2,2)/2/(kernelparam(1)^2)); case 'crbf' k = exp(-sum(conj(u-v).*(u-v),2)/2/(kernelparam(1)^2)); case 'coswave' k = exp(-sum((u-v).^2,2)/2/(kernelparam(1)^2)).*prod(cos((u-v)/kernelparam),2); case 'wave2' tempx=sum((u-v).^2,2); k = exp(-tempx/kernelparam(1)^2).*prod(1-2*((u-v)/kernelparam(1)).^2,2); case 'wave4' tempx=sum((u-v).^2,2); k = exp(-tempx/kernelparam(1)^2).*prod(1-4*((u-v)/kernelparam(1)).^2+4/3*((u-v)/kernelparam(1)).^4,2); case 'wave6' tempx=sum((u-v).^2,2); k = exp(-tempx/kernelparam(1)^2).*prod(1-6*((u-v)/kernelparam(1)).^2+4*((u-v)/kernelparam(1)).^4-8/15*((u-v)/kernelparam(1)).^6,2); case 'cauchy' k = kernelparam(1).^2./( kernelparam(1).^2 + sum((u-v).^2,2)); case 'erbf' k = exp(-sqrt(sum((u-v).^2,2))/kernelparam(1)); case 'sinc' k = sinc((u-v)/pi/kernelparam(1)); case 'cos' temp = sum(u.*v,2)./kernelparam(1); k = cos(temp); case 'sigmoid' k = tanh(kernelparam(1)*u*v'/length(u) + p2); case 'fourier' z = sin(kernelparam(1) + 1/2)*2*ones(length(u),1); i = find(u-v); z(i) = sin(kernelparam(1) + 1/2)*(u(i)-v(i))./sin((u(i)-v(i))/2); k = prod(z); case 'spline' z = 1 + u.*v + (1/2)*u.*v.*min(u,v) - (1/6)*(min(u,v)).^3; k = prod(z); case 'bspline' z = 0; for r = 0: 2*(kernelparam(1)+1) z = z + (-1)^r*binomial(2*(kernelparam(1)+1),r)*(max(0,u-v + kernelparam(1)+1 - r)).^(2*kernelparam(1) + 1); end k = prod(z); case 'anovaspline1' z = 1 + u.*v + u.*v.*min(u,v) - ((u+v)/2).*(min(u,v)).^2 + (1/3)*(min(u,v)).^3; k = prod(z); case 'anovaspline2' 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; k = prod(z); case 'anovaspline3' 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; k = prod(z); case 'anovabspline' z = 0; for r = 0: 2*(kernelparam(1)+1) z = z + (-1)^r*binomial(2*(kernelparam(1)+1),r)*(max(0,u-v + kernelparam(1)+1 - r)).^(2*kernelparam(1) + 1); end k = prod(1 + z); otherwise k = u*v'; end end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -