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

📄 locboostfunctions.m

📁 这是一些关于模式识别工具箱的源代码,和模式识别第二版配套使用
💻 M
字号:
function [f, Df] = LocBoostFunctions(params, type, patterns, targets, h, params2)

%Return a value for the LocBoost algorithm functions

[c,r] = size(params);
r2		= r/2;
Nf		= size(patterns,2);
max_width = 1e2;

switch type
case 'class_kernel'
    w   = 1./(1 + exp(-params* patterns));
	f   = (w.^((1+targets)/2) .* ((1-w).^((1-targets)/2)));
case 'Q1'
   f = LocBoostFunctions(params, 'class_kernel', patterns, targets);

   f = -sum(h.*log(eps + f));
   
   %w = 1./(1 + exp(-params* patterns));
   %Df= -sum(((ones(r2,1)*(h.*(((1+targets)/2 - w)))).*patterns)')';
   
   %f = -sum(h.*((1+targets)/2.*log(eps+(1./(1 + exp((-params* patterns))))) + ...
   %   			 (1-targets)/2.*log(eps+1-(1./(1 + exp((-params* patterns)))))));
case 'gamma_kernel'
	%f = (1./(1 + exp(params(1:r2) * patterns)));
    mu          = params(1:params2)';
    sigma       = reshape(params(1+params2:end), params2, params2);
    T           = schur(sigma);
    if (any(diag(T)==0))
        invsigma    = ones(params2)*max_width;
    else
        invsigma    = sqrtm(sigma);
    end
    
    patterns    = patterns - mu*ones(1,Nf);
    
    if (Nf < 50)
        f       = diag(patterns'*invsigma*patterns)';
    else
        f = zeros(1,Nf);
        for i = 1:Nf,
            f(i) = patterns(:,i)'*invsigma*patterns(:,i);
        end
    end
    
    f = exp(-0.5*f);
    %f = f < 1;
    %f       = exp(-0.5*sum((params(1:r2)'*ones(1,Nf)-patterns).^2.*(params(r2+[1:r2])'*ones(1,Nf))));
case 'Q2'
   %f = -sum(h.*(log(eps+(1./(1 + exp((params(1:r2) * patterns))))) + ...
   %   			 (1-h).*log(eps+1-(1./(1 + exp((params(1:r2)* patterns)))))));
   %f = -sum(h.*log(eps+exp(-0.5*sum((params(1:r2)'*ones(1,Nf)-patterns).^2.*(params(r2+[1:r2])'*ones(1,Nf))))) + ...
   %   (1-h).*log(eps+1-exp(-0.5*sum((params(1:r2)'*ones(1,Nf)-patterns).^2.*(params(r2+[1:r2])'*ones(1,Nf))))));
   ff= LocBoostFunctions(params, 'gamma_kernel', patterns, [], [], params2);
   f = -sum(h.*log(eps+ff) + (1-h).*log(eps+1-ff));
   
%    Dim         = size(patterns, 1);
%    mu          = params(1:params2)';
%    sigma       = reshape(params(1+params2:end), params2, params2);
%    T           = schur(sigma);
%    if (any(diag(T)==0))
%        invsigma    = ones(params2)*max_width;
%    else
%        invsigma    = sqrtm(sigma);
%    end
%    A           = ff ./ (1 - ff);
%    B           = ((patterns - mu*ones(1,Nf))'*invsigma)';
%    C           = (patterns - mu*ones(1,Nf))' * (patterns - mu*ones(1,Nf));
%    H           = ones(Dim,1) * h;
%    
%    dq2_dmu     = sum((H.*B - (1-H).*B.* (ones(Dim,1) * A))')';
%    dq2_dsigma  = 0.5 * sum((H*C - ((1-H)*C).*(ones(Dim,1) * A))')';
%    
%    Df          = [dq2_dmu, dq2_dsigma];
   
case 'NewTestSet'
    %This section is used for labeling new data (especially of dimension > 2)
    %In this case, params is phi and params2 is theta
    phi                 = params;
    theta               = params2;
    [Dims, Nf]          = size(patterns);
    targets             = ones(1,Nf);
    patterns(Dims+1,:)  = ones(1,length(targets));
    
    Pdecision           = LocBoostFunctions(theta(1,:), 'class_kernel', patterns, targets);
    
    for t = 2:size(params,1),
        Dgamma      = LocBoostFunctions(phi(t,:), 'gamma_kernel', patterns(1:Dims,:),[],[],Dims);  
        Dclass	    = LocBoostFunctions(theta(t,:), 'class_kernel', patterns, targets);
        Pdecision   = (1-Dgamma).*Pdecision + Dgamma.*Dclass;
    end
    
    f = Pdecision;
otherwise
   error ('Function type not recognized');
end


⌨️ 快捷键说明

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