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

📄 gcvridge.m

📁 一个很有用的EM算法程序包
💻 M
字号:
function h_opt = gcvridge(F, d, trS0, n, r, trSmin, options)%GCVRIDGE   Finds minimum of GCV function for ridge regression.%%   GCVRIDGE(F, d, trS0, n, r, trSmin, OPTIONS) finds the%   regularization parameter h that minimizes the generalized%   cross-validation function%%                         trace S_h%                 G(h) = ----------- %                          T(h)^2%%   of the linear regression model Y = X*B + E. The data matrices X%   and Y are assumed to have n rows, and the matrix Y of dependent%   variables can have multiple columns. The matrix S_h is the second%   moment matrix S_h = E_h'*E_h/n of the residuals E_h = Y - X*B_h,%   where B_h is, for a given regularization parameter h, the%   regularized estimate of the regression coefficients,% %                B_h = inv(X'*X + n h^2*I) * X'*Y.%%   The residual second second moment matrix S_h can be represented%   as%%                S_h = S0 + F' * diag(g.^2) * F%%   where g = h^2 ./ (d + h^2) = 1 - d.^2 ./ (d + h^2) and d is a%   column vector of eigenvalues of X'*X/n. The matrix F is the matrix%   of Fourier coefficients. In terms of a singular value%   decomposition of the rescaled data matrix n^(-1/2) * X = U *%   diag(sqrt(d)) * V', the matrix of Fourier coefficients F can be%   expressed as F = n^(-1/2) * U' * Y. In terms of the eigenvectors V%   and eigenvalues d of X'*X/n, the Fourier coefficients are F =%   diag(1./sqrt(d)) * V' * X' * Y/n. The matrix S0 is that part of%   the residual second moment matrix that does not depend on the%   regularization parameter: S0 = Y'*Y/n - F'*F.% %   As input arguments, GCVRIDGE requires:%        F:  the matrix of Fourier coefficients,%        d:  column vector of eigenvalues of X'*X/n,%     trS0:  trace(S0) = trace of generic part of residual 2nd moment matrix,%        n:  number of degrees of freedom for estimation of 2nd moments,%        r:  number of nonzero eigenvalues of X'*X/n,%   trSmin:  minimum of trace(S_h) to construct approximate lower bound%            on regularization parameter h (to prevent GCV from choosing%            too small a regularization parameter).%%   The vector d of nonzero eigenvalues of X'*X/n is assumed to be%   ordered such that the first r elements of d are nonzero and ordered %   from largest to smallest.%  %   The input structure OPTIONS contains optional parameters for the%   algorithm:%%     Field name           Parameter                                  Default%%     OPTIONS.minvarfrac Minimum fraction of total variation in X     0%                        that must be retained in the %                        regularization. From the parameter %                        OPTIONS.minvarfrac, an approximate upper %                        bound for the regularization parameter is%                        constructed. The default value %                        OPTIONS.minvarfrac = 0  corresponds to no%                        upper bound for the regularization parameter.     %   References:%   GCVRIDGE is adapted from GCV in Per Christian Hansen's REGUTOOLS%       toolbox:%   P.C. Hansen, "Regularization Tools: A Matlab package for%       analysis and solution of discrete ill-posed problems,"%       Numer. Algorithms, 6 (1994), 1--35.%%   see also: %   G. Wahba, "Spline Models for Observational Data",%       CBMS_NSF Regional Conference Series in Applied Mathematics,%       SIAM, 1990, chapter 4.  error(nargchk(6, 7, nargin))     % check number of input arguments   % sizes of input matrices  d      = d(:);                   % make sure that d is column vector  if length(d) < r    error('All nonzero eigenvalues must be given.')  end  % ================           process options        ======================  if nargin == 6 | isempty(options)    fopts       = [];  else    fopts       = fieldnames(options);  end      minvarfrac    = 0;  if strmatch('minvarfrac', fopts)    minvarfrac = options.minvarfrac;    if minvarfrac < 0 | minvarfrac > 1      error('OPTIONS.minvarfrac must be in [0,1].')    end  end  % ========================================================================    p      = size(F, 1);  if p < r    error(['F must have at least as many rows as there are nonzero' ...	   ' eigenvalues d.'])   end  % row sum of squared Fourier coefficients  fc2    = sum(F.^2, 2);    % accuracy of regularization parameter   h_tol  = .2/sqrt(n);            % heuristic upper bound on regularization parameter  varfrac = cumsum(d)/sum(d);  if minvarfrac > min(varfrac)    d_max           = interp1(varfrac, d, minvarfrac, 'linear');    h_max           = sqrt( d_max );  else                h_max           = sqrt( max(d) ) / h_tol;      end      % heuristic lower bound on regularization parameter  if trS0 > trSmin    % squared residual norm is greater than a priori bound for all     % regularization parameters    h_min         = sqrt(eps);  else    % find squared residual norms of truncated SVD solutions    rtsvd         = zeros(r, 1);    rtsvd(r)      = trS0;    for j = r-1: -1: 1      rtsvd(j)    = rtsvd(j+1) + fc2(j+1);    end    % take regularization parameter equal to square root of eigenvalue     % that corresponds to TSVD truncation level with residual norm closest     % to a priori bound trSmin    [dummy, rmin] = min(abs(rtsvd - trSmin));    h_min         = sqrt( max( d(rmin), min(d)/n ) );  end  if h_min < h_max    % find minimizer of GCV function    minopt = optimset('TolX', h_tol, 'Display', 'off');    h_opt  = fminbnd('gcvfctn', h_min, h_max, minopt, d(1:r), fc2(1:r), trS0, n-r);  else    warning(['Upper bound on regularization parameter smaller' ...	     ' than lower bound.'])    h_opt  = h_min;   end

⌨️ 快捷键说明

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