⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpgrad.m

📁 高斯过程应用与回归分析的matlab程序
💻 M
字号:
function g = gpgrad(net, x, t)%GPGRAD	Evaluate error gradient for Gaussian Process.%%	Description%	G = GPGRAD(NET, X, T) takes a Gaussian Process data structure NET%	together  with a matrix X of input vectors and a matrix T of target%	vectors, and evaluates the error gradient G. Each row of X%	corresponds to one input vector and each row of T corresponds to one%	target vector.%%	See also%	GP, GPCOVAR, GPFWD, GPERR%%	Copyright (c) Ian T Nabney (1996-2001)errstring = consist(net, 'gp', x, t);if ~isempty(errstring);  error(errstring);end% Evaluate derivatives with respect to each hyperparameter in turn.ndata = size(x, 1);[cov, covf] = gpcovar(net, x);cninv = inv(cov);trcninv = trace(cninv);cninvt = cninv*t;% Function parametersswitch net.covar_fn  case 'sqexp'		% Squared exponential    gfpar = trace(cninv*covf) - cninvt'*covf*cninvt;  case 'ratquad' 	% Rational quadratic    beta = diag(exp(net.inweights));    gfpar(1) = trace(cninv*covf) - cninvt'*covf*cninvt;    D2 = (x.*x)*beta*ones(net.nin, ndata) - 2*x*beta*x' ...       + ones(ndata, net.nin)*beta*(x.*x)';    E = ones(size(D2));    L = - exp(net.fpar(2)) * covf .* log(E + D2); % d(cn)/d(nu)    gfpar(2) = trace(cninv*L) - cninvt'*L*cninvt;  otherwise    error(['Unknown covariance function ', net.covar_fn]);end% Bias derivativendata = size(x, 1);fac = exp(net.bias)*ones(ndata);gbias = trace(cninv*fac) - cninvt'*fac*cninvt;% Noise derivativegnoise = exp(net.noise)*(trcninv - cninvt'*cninvt);% Input weight derivativesif strcmp(net.covar_fn, 'ratquad')  F = (exp(net.fpar(2))*E)./(E + D2);endnparams = length(net.inweights);for l = 1 : nparams  vect = x(:, l);  matx = (vect.*vect)*ones(1, ndata) ... 	- 2.0*vect*vect' ... 	+ ones(ndata, 1)*(vect.*vect)';  switch net.covar_fn    case 'sqexp'	% Squared exponential      dmat = -0.5*exp(net.inweights(l))*covf.*matx;          case 'ratquad'	% Rational quadratic      dmat = - exp(net.inweights(l))*covf.*matx.*F;    otherwise      error(['Unknown covariance function ', net.covar_fn]);  end  gw1(l) = trace(cninv*dmat) - cninvt'*dmat*cninvt;endg1 = [gbias, gnoise, gw1, gfpar];g1 = 0.5*g1;% Evaluate the prior contribution to the gradient.if isfield(net, 'pr_mean')  w = gppak(net);
  m = repmat(net.pr_mean, size(w));  if size(net.pr_mean) == [1 1]    gprior = w - m;    g2 = gprior/net.pr_var;  else    ngroups = size(net.pr_mean, 1);    gprior = net.index'.*(ones(ngroups, 1)*w - m);    g2 = (1./net.pr_var)'*gprior;  endelse  gprior = 0;  g2 = 0;endg = g1 + g2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -