% Initialisation script for SM kernel. % Andrew Gordon Wilson, 11 Oct 2013 % Example hyper initialisation for spectral mixture kernel. % One can improve this initialisation scheme by sampling from (or % projecting) the empirical spectral density. % This is not an all purpose initialisation script. Common sense is % still required when initialising the SM kernel in new situations. function hypinit = initSMhypers(Q,x,y) [n,D] = size(x); % create hypers w = zeros(1,Q); m = zeros(D,Q); s = zeros(D,Q); % create initialisation vector of all hypers hypinit = zeros(Q+2*D*Q,1); w(1,:) = std(y)./Q; % Simple initialisation for i=1:D d2 = sqrt(sq_dist(x(:,i)')); % get distances for each input dimension if (n>1) d2(d2 == 0) = d2(1,2); else d2(d2 == 0) = 1; end minshift = min(min(d2)); nyquist = 0.5/minshift; m(i,:) = nyquist*rand(1,Q); % draw frequencies from Uniform(0,Nyquist) % for non-evenly spaced data, we approximate this as 1/minimum spacing % between two points. This factor 'nyquist' is *critical* for % achieving a good initialisation, and should be adjusted to the % problem at hand. maxshift = max(max(d2)); s(i,:) = 1./abs(maxshift*randn(1,Q)); % length-scales have a truncated % Gaussian distribution % with mean proportional to the max % range of the data. end hypinit(1:Q) = log(w); hypinit(Q+(1:Q*D)) = log(m(:)); hypinit(Q+Q*D+(1:Q*D)) = log(s(:));