gradient_vector_linear_approx.m

来自「RankNGG 算法实现. 含有dll文件。源码为matlab」· M 代码 · 共 118 行

M
118
字号
function [gradient]=gradient_vector_linear_approx(w,data)
% This function returns the gradient vecotr to be used by the nonlinear
% conjugate gradient.
%
% This is the approximate version which scales as $$O(N)$$.
%
%% Input
%
% * w  ... d x 1 weight vector
% * data ... structure containing the data regarding the ranking task at hand [See convert_data_to_ranking_format.m]
%
%  Has the following extra parameters--
%
% data.lambda, the regularization parameter
%
% data.epsil, the accuracy for fast erfc summation
%
% data.delta_1=precompute_delta_1(data);
%
% The parameters for the fast erfc summation--
%
% data.p
%
% data.h
%
% data.rx
%
% data.r
%
% data.nn
%                                
%
%% Ouput
%
% *  gradient ... d x 1 gradient vector evaluated at w
%
%% Signature
%
% Author: Vikas Chandrakant Raykar
% E-Mail: vikas@cs.umd.edu
% Date: September 27, 2006
%
%% See also
%
% convert_data_to_ranking_format,  non_linear_conjugate_gradient, RankNCG_linear_train
%

%--------------------------------------------------------------------------
% Compute the scalars z
%--------------------------------------------------------------------------

z=cell(1,data.S);

constant=sqrt(3)/(sqrt(2)*pi);

for i=1:1:data.S
    z{i}=constant*w'*data.X{i};
end

%--------------------------------------------------------------------------
% Compute the terms delta_2 and delta_3
%--------------------------------------------------------------------------

delta_2=zeros(data.d,1);
delta_3=zeros(data.d,1);

for g=1:data.C
    
    i=data.G(g,1);
    j=data.G(g,2);
    
    delta_2=delta_2+data.X{i}*compute_E_minus(data,z,j,i)';
    delta_3=delta_3+data.X{j}*compute_E_plus(data,z,i,j)';
       
end


%--------------------------------------------------------------------------
% Compute the gradient vector
%--------------------------------------------------------------------------

gradient=-(-data.lambda*w-data.delta_1+0.5*delta_2-0.5*delta_3);



return

%--------------------------------------------------------------------------
function [E_minus_ji]=compute_E_minus(data,z,j,i)

 N=data.m(j);
 M=data.m(i);
 q=ones(1,N);
 x=z{j};
 y=z{i};

E_minus_ji=FastErfcSummation(N,M,q,x,y,data.p,data.h,data.rx,data.r,data.nn);

return

%--------------------------------------------------------------------------
function [E_plus_ij]=compute_E_plus(data,z,i,j)

 N=data.m(i);
 M=data.m(j);
 q=ones(1,N);
 x=-z{i};
 y=-z{j};

E_plus_ij=FastErfcSummation(N,M,q,x,y,data.p,data.h,data.rx,data.r,data.nn);

return


%--------------------------------------------------------------------------


⌨️ 快捷键说明

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