www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xreggpr/leastsq.m
function [m,OK] = leastsq( m,X,Y ) %leastsq fit GPM maximum marginal log likelihood function % [m,OK] = leastsq( m,xc,Y ) % xc has already been transformed to [-1,1] % Y has already been transformed if a Box-Cox transform is used % Copyright 2015-2016 The MathWorks, Inc. try opts = optimoptions('fmincon'); opts.Display = 'none'; nObs = size(X,1); if nObs>m.LargeScale.Threshold && m.LargeScale.ActiveSetSize<nObs % large scale fitting method Args = {'ActiveSetSize',min(nObs,m.LargeScale.ActiveSetSize),... 'FitMethod',m.LargeScale.FitMethod,... 'PredictMethod',m.LargeScale.PredictMethod,... 'ActiveSetMethod',m.LargeScale.ActiveSetMethod}; else % default active set method if data size is greater than 2000. This % overrides the random selection method. Args = {'ActiveSetMethod','Random'}; end % find initial hyperparameters if nObs<=1000 % use whole data set [Theta0,Sigma0] = classreg.learning.gputils.initialHyperparameters(m.Kernel,m.Basis,X,Y); else % select up to 1000 points at random to find initial values sel = randperm(nObs,1000); [Theta0,Sigma0] = classreg.learning.gputils.initialHyperparameters(m.Kernel,m.Basis,X(sel,:),Y(sel)); end ws = warning('off','stats:classreg:learning:impl:GPImpl:GPImpl:OptimizerUnableToConverge'); restoreWarnings = onCleanup(@() warning(ws)); % call fitrgp m.StatsGPR = fitrgp(X,Y,... 'KernelFunction',m.Kernel,... 'BasisFunction',m.Basis,... 'KernelParameters',Theta0,... 'Sigma',Sigma0,... 'Optimizer','fmincon',... 'OptimizerOptions',opts,... Args{:},... 'PredictorNames',get(m,'symbols'),... 'ResponseName',varname(m)); if all(isfinite(m.StatsGPR.KernelInformation.KernelParameters)) % fitting can result in infinite lengths if ~isempty(m.StatsGPR.LogLikelihood) % store marginal likelihood if it is available m.LogML = m.StatsGPR.LogLikelihood; end m = var(m,[],m.StatsGPR.Sigma^2,Inf); OK = true; else OK = false; end catch OK = false; end