📄 constructkernel.m
字号:
function [K,elapse] = constructKernel(fea_a,fea_b,options)
% function [K,elapse] = constructKernel(fea_a,fea_b,options)
% Usage:
% K = constructKernel(fea_a,[],options)
%
% K = constructKernel(fea_a,fea_b,options)
%
% fea_a, fea_b : Rows of vectors of data points.
%
% options : Struct value in Matlab. The fields in options that can
% be set:
% KernelType - Choices are:
% 'Gaussian' - e^{-(|x-y|^2)/2t^2}
% 'Polynomial' - (x'*y)^d
% 'PolyPlus' - (x'*y+1)^d
% 'Linear' - x'*y
%
% t - parameter for Gaussian
% d - parameter for Poly
%
% version 1.0 --Sep/2006
%
% Written by Deng Cai (dengcai2 AT cs.uiuc.edu)
%
if (~exist('options','var'))
options = [];
else
if ~strcmpi(class(options),'struct')
error('parameter error!');
end
end
%=================================================
if ~isfield(options,'KernelType')
options.KernelType = 'Gaussian';
end
switch lower(options.KernelType)
case {lower('Gaussian')} % e^{-(|x-y|^2)/2t^2}
if ~isfield(options,'t')
options.t = 1;
end
case {lower('Polynomial')} % (x'*y)^d
if ~isfield(options,'PolyDegree')
options.PolyDegree = 2;
end
case {lower('PolyPlus')} % (x'*y+1)^d
if ~isfield(options,'PolyDegree')
options.PolyDegree = 2;
end
case {lower('Linear')} % x'*y
;
otherwise
error('KernelType does not exist!');
end
tmp_T = cputime;
%=================================================
switch lower(options.KernelType)
case {lower('Gaussian')}
if isempty(fea_b)
D = EuDist2(fea_a,[],0);
else
D = EuDist2(fea_a,fea_b,0);
end
K = exp(-D/(2*options.t^2));
case {lower('Polynomial')}
if isempty(fea_b)
D = fea_a * fea_a';
else
D = fea_a * fea_b';
end
K = D.^options.d;
case {lower('PolyPlus')}
if isempty(fea_b)
D = fea_a * fea_a';
else
D = fea_a * fea_b';
end
K = (D+1).^options.d;
case {lower('Linear')}
if isempty(fea_b)
K = fea_a * fea_a';
else
K = fea_a * fea_b';
end
otherwise
error('KernelType does not exist!');
end
if isempty(fea_b)
K = max(K,K');
end
elapse = cputime - tmp_T;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -