> The Spider Objects

>       MRANK Manifold ranking object

>        a = mrank(hyperParam)

>        Generates an mrank object with given hyperparameters.

>          Hyperparameters (with defaults)

>          child=kernel('rbf')  -- the kernel is stored as a member called "child"
>          alpha=0.99           -- parameter governing convergence rate
>          iterations=600       -- number of iterations of algorithm
>          use_edge_graph=0     -- if turned on, sparsify kernel using edge graph
>          normalize=0          -- normalize in the input space? 1 yes, 0 no
>          standardize=[]       -- centre and standardize data? 1 yes, 0 no
>                                  default behaviour is to do so, except for
>                                  linear and polynomial-based kernels
>                                  (good for maintaining sparsity).

>        Methods:
>           TRAIN, TEST, PLOT

>           There is no real need to split the algorithm into TRAIN and TEST
>           phases - this is done for consistency with other algorithm classes.
>           If labels are supplied in DAT.y, a single call to TRAIN is sufficient.
>           If DAT.y is empty, TRAIN merely stores the data in the algorithm
>           object, waiting for query points to be supplied by TEST.

>           [DAT, A] = TRAIN(A, DAT);

>           Points with Y=0 within DAT are considered unlabelled, and points with
>           non-zero Y are the query points. The unlabelled points are ranked
>           according to their similarity to the query points, computed via an
>           iterative spreading activation network algorithm. A.result on exit
>           contains [I S R] where I is the original index, S the ranking score
>           and R the rank of each point. Results can be plotted with PLOT(A).
>           DAT is unchanged.

>           DAT = TEST(A, DAT)

>           If DAT contains labels, throw away data stored in A and procede using
>           DAT as for TRAIN. If not, use DAT as the query points, and use any
>           unlabelled points from the data stored in A as the unlabelled points
>           (stored labelled points, i.e. those that were used as query points in
>           the previous run, are removed). On exit, the y field of DAT contains
>           ranking scores. The results can be plotted with PLOTRANKING(DAT).

>           PLOT(A) -- see HELP MRANK/PLOT

>        Example:
>        d=gen(spiral({'m=100','n=0.5','noise=0.35'}));
>        hold on;
>        plot(d.X(:,1),d.X(:,2),'k.');
>        I=randperm(200);
>        label=['r+','','bo']
>        Ipos=find(d.Y==1); I1=randperm(length(Ipos));
>        p=plot(d.X(Ipos(I1(1)),1),d.X(Ipos(I1(1)),2),'ro'); set(p,'MarkerSize',10,'MarkerFaceColor',[1,0,0]);
>        d.Y=d.Y*0;
>        d.Y(Ipos(I1(1)),:)=1;
>        axis off;
>        mr=mrank;
>        mr.child=kernel('rbf',0.1);
>        [r,a]=train(mr,d)
>        r.Y=a.result(:,3);
>        I=find(~isnan(r.Y));
>        for i=1:length(I)

>            s=r.Y(I(i),:)/max(r.Y);
>            s=1/exp(s);
>            if(s<1)
>                p=plot(r.X(I(i),1),r.X(I(i),2),'o');
>                set(p,'MarkerFaceColor',[s,0,0])
>                set(p,'Color',[s,0,0])
>                set(p,'MarkerSize',10*s);
>            else
>                p=plot(r.X(I(i),1),r.X(I(i),2),'o');
>                set(p,'MarkerFaceColor',[1,0,0])
>                set(p,'Color',[1,0,0])
>                set(p,'MarkerSize',10*s);
>            end
>        end
>        p=plot(d.X(Ipos(I1(1)),1),d.X(Ipos(I1(1)),2),'go'); set(p,'MarkerSize',10,'MarkerFaceColor',[0,1,0]);

> | Reference : Ranking on Data Manifolds

> | Author : Dengyong Zhou , Jason weston , Arthur Gretton , OlivierBousquet and Bernhard Schölkopf

> | Link : http://www.kyb.tuebingen.mpg.de/publications/pdfs/pdf2290.pdf