📄 svkernel.asv
字号:
function k = svkernel(ker,u,v)%SVKERNEL kernel for Support Vector Methods%% Usage: k = svkernel(ker,u,v)%% Parameters: ker - kernel type% u,v - kernel arguments%% Values for ker: 'linear' -% 'poly' - p1 is degree of polynomial% 'sa' - p1 is scale% 'rbf' - p1 is width of rbfs (sigma)% 'sigmoid' - p1 is scale, p2 is offset% 'spline' -% 'bspline' - p1 is degree of bspline% 'fourier' - p1 is degree% 'erfb' - p1 is width of rbfs (sigma)% 'anova' - p1 is max order of terms% % Author: Zhou Weida (Zhouwd@rsp.xidian.edu.cn) if (nargin < 1) % check correct number of arguments help svkernel else global p1 p2; % could check for correct number of args in here % but will slow things down further switch lower(ker) case 'linear' k = u*v'; case 'poly' k = (u*v')^p1; case 'comrbf' k = exp(-((real(u)-real(v))*(real(u)-real(v))'... +(imag(u)-imag(v))*(imag(u)-imag(v))')/(2*p1^2)); case 'rbf' k = exp(-(u-v)*(u-v)'/(2*p1^2)); case 'sa' if sum(u-v)==0 k=1; else k =(sin(p1*sum(u-v)))./(p1*sum(u-v)); end case '1_wavelet' k=0; for i=1:1:4 k=k+cos(1.75*u/(p1*2^(-1*i)))*cos(1.75*v/(p1*2^(-1*i)))*exp(-(u'*u+v'*v)/(2*p1*p1*2^(-2*i))); end case 'erbf' k = exp(-sqrt((u-v)*(u-v)')/(2*p1^2)); case 'sigmoid' %k = tanh(p1*u*v'/length(u) + p2); k = tanh(p1*u*v' + p2); case 'fourier' z = sin(p1 + 1/2)*2*ones(length(u),1); i = find(u-v); z(i) = sin(p1 + 1/2)*(u(i)-v(i))./sin((u(i)-v(i))/2); k = prod(z); case 'spline' 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 {'curvspline','anova'} z = 1 + u.*v + (1/2)*u.*v.*min(u,v) - (1/6)*(min(u,v)).^3; k = prod(z); case 'gammapdf' k=1; if (isempty(u<0) & isempty(v<=0)) for k1=1:length (v) alpha=v(1,k1)*v(1,k1)/(p1*p1)-1; beta=(p1*p1)/v(1,k1); k=k*u(1,k1).^alpha*exp(-u(1,k1)/beta)/(beta.^(alpha+1)*gamma(alpha+1)); end else k=0; end case 'betapdf' k=1; if (isempty(u<=0) & isempty(u>=1) & isempty(v<=0) & isempty(v>=1)) for k1=1:length(v) temp=v(1,k1)-v(1,k1)*v(1,k1)-p1*p1 alpha=v(1,k1)*temp/(p1*p1)-1; beta=(1-v(1,k1))*temp/(p1*p1)-1; k=k*gamma( % - sum(u.*v) - 1; % z = 1 + u.*v + (1/2)*u.*v.*min(u,v) - (1/6)*(min(u,v)).^3;% k = prod(z); % z = (1/2)*u.*v.*min(u,v) - (1/6)*(min(u,v)).^3;% k = prod(z); case 'bspline' z = 0; for r = 0: 2*(p1+1) z = z + (-1)^r*binomial(2*(p1+1),r)*(max(0,u-v + p1+1 - r)).^(2*p1 + 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*(p1+1) z = z + (-1)^r*binomial(2*(p1+1),r)*(max(0,u-v + p1+1 - r)).^(2*p1 + 1); end k = prod(1 + z); otherwise k = u*v'; end end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -