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

📄 mfbox_kernelica.m

📁 toolbox for spm 5 for data, model free analysis
💻 M
字号:
function [comp,psi]=mfbox_kernelica(source,ics,method)% Copyright by Peter Gruber % Signal Processing & Information Theory group% Institute of Biophysics, University of Regensburg, Germany% Homepage: http://research.fabian.theis.name%           http://www-aglang.uni-regensburg.de%% This file is free software, subject to the % GNU GENERAL PUBLIC LICENSE, see gpl.txterror(nargchk(1,3,nargin))     % check no. of input argsdim = size(source,1);if (nargin<2), ics = dim; endif (nargin<3), method = 'geneticgausspearson'; endmethod = lower(method);switch method    case 'geneticgausspearson'        borderBase = [2.6,4];        borderSlope = [0,1];        maxNumIterations = 100;        epsilon = 0.001;        [optcols,target,kernelmat] = basisopt(source,10*ics,ics,100*ics,'gauss');        optcols = optcols(size(optcols,1),:);        psi = projection(source,optcols,kernelmat,'gauss');        comp = mfbox_fasticapearson(psi',epsilon,maxNumIterations,borderBase, ...            borderSlope,ics,1,dim,'off');    case 'geneticpolypearson'        borderBase = [2.6,4];        borderSlope = [0,1];        maxNumIterations = 100;        epsilon = 0.001;        [optcols,target,kernelmat] = basisopt(source,10*ics,ics,100*ics,'poly',1,5);        optcols = optcols(size(optcols,1),:);        psi = projection(source,optcols,kernelmat,'poly',1,5);        comp = mfbox_fasticapearson(psi',epsilon,maxNumIterations,borderBase, ...            borderSlope,ics,1,dim,'off');    case 'geneticgaussjade'        [optcols,target,kernelmat] = basisopt(source,10*ics,ics,100*ics,'gauss');        optcols = optcols(size(optcols,1),:);        psi = projection(source,optcols,kernelmat,'gauss');        [A,comp] = mfbox_jade(psi',ics);    otherwise        [A,comp] = mfbox_jade(source',ics);endreturnfunction [optcols,target,kernel_opt]=basisopt(X,ind_num,ind_size,maxgen,kernel,c,d,verbose)if (nargin<6), c = 1; endif (nargin<7), d = 1; endif (nargin<8), verbose = 0; endggap = 0.9;if (verbose>0), warning('Number of individuals %d, Generation Gap: %f',ind_num,ggap); end[rows_X,cols_X] = size(X);chrom = initpop(ind_num, ind_size, cols_X);ObjV = condobj(X,chrom,kernel,c,d);if (verbose>0), warning('Minimale Konditionszahl des Ausgangchromosomensatzes: %f',min(ObjV)); endgen = 0;target = zeros(1,maxgen);optcols = zeros(maxgen,size(chrom,2));while (gen<maxgen)    fitnv = ranking(ObjV);    SelCh = select('sus',chrom,fitnv,ggap);    SelCh = sort(SelCh,2);    SelCh = recombin('xovsp',SelCh,0.7);    SelCh = mut(SelCh,0.1,(cols_X+1)*ones(1,ind_size));    [rows_SelCh,cols_SelCh] = size(SelCh);    SelCh = SelCh+(SelCh==zeros(rows_SelCh,cols_SelCh).*round(cols_X*rand(rows_SelCh,cols_SelCh)));    ObjVSel = condobj(X,SelCh,kernel,c,d);    [chrom,ObjV] = reins(chrom,SelCh,1,1,ObjV,ObjVSel);    gen = gen+1;    [target(gen),index] = min(ObjV);    optcols(gen,:) = chrom(index,:);    if (verbose>0), warning('current generation %d',gen); endend[ObjV,kernel_opt] = condobj(X,optcols(gen,:),kernel,c,d);if (verbose>1), plot(target); endfunction psi=projection(X,basis,kernelm,kernel,c,d)if (nargin<5), c = 1; endif (nargin<6), d = 1; end[rows_X,cols_X] = size(X);[rows_basis,dim_basis] = size(basis);kbasis = X(:,basis);if (strcmp(kernel,'poly'))    Xvdot = (kbasis'*X+c).^d;    psi = kernelm^(-1/2)*Xvdot;endif (strcmp(kernel,'gauss'))    Xvdot = [];    for k = 1:dim_basis        D = kbasis(:,k)*ones(1,cols_X);        B = D-X;        B = B.*B;        diflength = sum(B,1);        Xvdot = cat(1,Xvdot,-diflength/c);    end    Xvdot = exp(Xvdot);    psi = kernelm^(-1/2)*Xvdot;endfunction chrom=initpop(ind_num,ind_size,max_value)chrom = zeros(ind_num,ind_size);for k = 1:ind_num    permutation = (randperm(max_value));    chrom(k,:) = permutation(1:ind_size);endchrom = sort(chrom,2);function [Condnumbers,kernel_opt]=condobj(X,chrom,kernel,c,d)[rows_chrom,cols_chrom] = size(chrom);Condnumbers = zeros(rows_chrom,1);if (strcmp(kernel,'poly'))    cond_min = inf;    for k = 1:rows_chrom        sel_matrix = X(:,chrom(k,:));        kernel_matrix = ((sel_matrix'*sel_matrix)+c).^d;        Condnumbers(k) = cond(kernel_matrix);        if (Condnumbers(k)<cond_min)            cond_min = Condnumbers(k);            kernel_opt = kernel_matrix;        end    endendif (strcmp(kernel,'gauss'))    cond_min = inf;    for k = 1:rows_chrom        sel_matrix = X(:,chrom(k,:));        EXPONENT = [];        for l = 1:cols_chrom;            d = sel_matrix(:,l);            D = d*ones(1,cols_chrom);            B = sel_matrix-D;            B = B.*B;            diflength = (sum(B,1))';            EXPONENT = cat(2,EXPONENT,-diflength/c);        end        kernel_matrix = exp(EXPONENT);        Condnumbers(k) = cond(kernel_matrix);        if (Condnumbers(k)<cond_min)            cond_min = Condnumbers(k,1);            kernel_opt = kernel_matrix;        end    endendfunction [chrom,objvch]=reins(chrom,SelCh,subpop,InsOpt,objvch,ObjVSel)NindP = size(chrom,1);NindO = size(SelCh,1);if (nargin == 2), subpop = 1; endif (nargin > 2),    if isempty(subpop), subpop = 1;    elseif isnan(subpop), subpop = 1;    endendNind = NindP/subpop;Nsel = NindO/subpop;Isobjvch = 0; IsObjVSel = 0;if (nargin>4),    Isobjvch = 1;endif (nargin<4), insr = 1.0; sel = 0; endif (nargin>=4),    if (isempty(InsOpt)), insr = 1.0; sel = 0;    elseif (isnan(InsOpt)), insr = 1.0; sel = 0;    else        insr = NaN; sel = NaN;        if (length(InsOpt) >= 1), sel = InsOpt(1); end        if (length(InsOpt) >= 2), insr = InsOpt(2); end        if (isnan(sel)), sel = 0; end        if (isnan(insr)), insr =1.0; end    endendif (insr==0), return; endNIns = min(max(floor(insr*Nsel+.5),1),Nind);for irun=1:subpop,    if (sel==1)        [dummy,ChIx] = sort(-objvch((irun-1)*Nind+1:irun*Nind));    else        [dummy,ChIx] = sort(rand(Nind,1));    end    PopIx = ChIx((1:NIns)')+ (irun-1)*Nind;    if (NIns<Nsel)        [dummy,OffIx] = sort(ObjVSel((irun-1)*Nsel+1:irun*Nsel));    else        OffIx = (1:NIns)';    end    SelIx = OffIx((1:NIns)')+(irun-1)*Nsel;    chrom(PopIx,:) = SelCh(SelIx,:);    if (Isobjvch == 1 && IsObjVSel == 1), objvch(PopIx) = ObjVSel(SelIx); endendfunction newchrom=mut(oldchrom,Pm,baseV)[Nind,Lind] = size(oldchrom);if (nargin<2), Pm = 0.7/Lind; endif (isnan(Pm)), Pm = 0.7/Lind; endif (nargin<3), baseV = crtbase(Lind);  endif (isnan(baseV)), baseV = crtbase(Lind);  endif (isempty(baseV)), baseV = crtbase(Lind);  endbaseM = baseV(ones(Nind,1),:) ;newchrom = rem(oldchrom+(rand(Nind,Lind)<Pm).*ceil(rand(Nind,Lind).*(baseM-1)),baseM);function newchrom=recombin(REC_F,chrom,RecOpt,subpop)Nind = size(chrom,1);if (nargin<4), subpop = 1; endif (nargin>3),    if isempty(subpop), subpop = 1;    elseif isnan(subpop), subpop = 1;    endendNind = Nind/subpop;if (nargin<3), RecOpt = 0.7; endif (nargin>2),    if (isempty(RecOpt)), RecOpt = 0.7;    elseif (isnan(RecOpt)), RecOpt = 0.7;    endendnewchrom = cell(1,subpop);for irun = 1:subpop,    chromSub = chrom((irun-1)*Nind+1:irun*Nind,:);    newchromSub = feval(REC_F,chromSub,RecOpt);    newchrom{irun} = newchromSub;endnewchrom = cat(1,newchrom{:});function fitnv=ranking(ObjV,RFun,subpop)Nind = size(ObjV,1);if (nargin<2), RFun = []; endif (nargin>1), if isnan(RFun), RFun = []; end, endif (numel(RFun) == 2)    if (RFun(2) == 1), NonLin = 1;    elseif (RFun(2) == 0), NonLin = 0;    end    RFun = RFun(1);    if (isnan(RFun)), RFun = 2; endendif (nargin<3), subpop = 1; endif (nargin>2)    if isempty(subpop), subpop = 1;    elseif isnan(subpop), subpop = 1;    endendNind = Nind/subpop;if (isempty(RFun))    RFun = 2*(0:Nind-1)'/(Nind-1);elseif (numel(RFun) == 1)    if NonLin == 1,        Root1 = roots([RFun(1)-Nind,(RFun(1)*ones(1,Nind-1))]);        RFun = (abs(Root1(1)) * ones(Nind,1)) .^ (0:Nind-1)';        RFun = RFun / sum(RFun) * Nind;    else        RFun = 2-RFun + 2*(RFun-1)*[0:Nind-1]'/(Nind-1);    endend;fitnv = [];for irun = 1:subpop,    ObjVSub = ObjV((irun-1)*Nind+1:irun*Nind);    NaNix = isnan(ObjVSub);    Validix = find(~NaNix);    [ans,ix] = sort(-ObjVSub(Validix));    ix = [find(NaNix);Validix(ix)];    Sorted = ObjVSub(ix);    i = 1;    fitnvSub = zeros(Nind,1);    for j = [find(Sorted(1:Nind-1)~=Sorted(2:Nind));Nind]',        fitnvSub(i:j) = sum(RFun(i:j)) * ones(j-i+1,1) / (j-i+1);        i =j+1;    end    [ans,uix] = sort(ix);    fitnvSub = fitnvSub(uix);    fitnv = [fitnv;fitnvSub];endfunction SelCh=select(sel_F,chrom,fitnv,ggap,subpop)NindCh = size(chrom,1);if (nargin<5), subpop = 1; endif (nargin>4),    if isempty(subpop), subpop = 1;    elseif isnan(subpop), subpop = 1;    endendNind = NindCh/subpop;if (nargin<4), ggap = 1; endif (nargin>3),    if isempty(ggap), ggap = 1;    elseif isnan(ggap), ggap = 1;    endendNSel = max(floor(Nind*ggap+.5),2);SelCh = zeros(subpop,size(chrom,2));for irun = 1:subpop,    fitnvSub = fitnv((irun-1)*Nind+1:irun*Nind);    ChrIx = feval(sel_F,fitnvSub,NSel)+(irun-1)*Nind;    SelCh(irun,:) = chrom(ChrIx,:);endfunction basevec=crtbase(Lind,base)[ml,LenL] = size(Lind);if (nargin<2)    base = 2*ones(LenL,1);endmb = size(base,1);if (~ (ml>1 || mb>1)) && (~ ((LenL>1 && LenB>1 && LenL~=LenB) || ...        (LenL==1 && LenB>1 ))) && (LenB==1 && LenL>1)    base = base*ones(LenL,1);endbasevec = [];for i = 1:LenL    basevec = [basevec,base(i)*ones(Lind(i),1)'];endfunction newchrom=xovsp(oldchrom,xovr)newchrom = xovmp(oldchrom,xovr,1,0);function NewChrIx=sus(fitnv,Nsel)[Nind,ans] = size(fitnv);cumfit = cumsum(fitnv);trials = cumfit(Nind)/Nsel*(rand+(0:Nsel-1)');Mf = cumfit(:,ones(1,Nsel));Mt = trials(:,ones(1,Nind))';[NewChrIx,ans] = find(Mt<Mf & [zeros(1,Nsel);Mf(1:Nind-1,:)]<=Mt);[ans,shuf] = sort(rand(Nsel, 1));NewChrIx = NewChrIx(shuf);function newchrom=xovmp(oldchrom,Px,Npt,Rs)[Nind,Lind] = size(oldchrom);if (Lind<2), newchrom = oldchrom; return; endif (nargin<4), Rs = 0; endif (nargin<3), Npt = 0; Rs = 0; endif (nargin<2), Px = 0.7; Npt = 0; Rs = 0; endif (isnan(Px)), Px = 0.7; endif (isnan(Npt)), Npt = 0; endif (isnan(Rs)), Rs = 0; endif (isempty(Px)), Px = 0.7; endif (isempty(Npt)), Npt = 0; endif (isempty(Rs)), Rs = 0; endXops = floor(Nind/2);DoCross = rand(Xops,1)<Px;odd = 1:2:Nind-1;even = 2:2:Nind;Mask = ~Rs|(oldchrom(odd,:)~=oldchrom(even,:));Mask = cumsum(Mask,2);xsites(:,1) = Mask(:,Lind);if (Npt>=2)    xsites(:,1) = ceil(xsites(:,1).*rand(Xops,1));endxsites(:,2) = rem(xsites+ceil((Mask(:,Lind)-1).*rand(Xops,1)).*DoCross-1,Mask(:,Lind))+1;Mask = (xsites(:,ones(1,Lind))<Mask) == ...    (xsites(:,2*ones(1,Lind))<Mask);if (~Npt)    shuff = rand(Lind,Xops);    [ans,shuff] = sort(shuff);    for i = 1:Xops        oldchrom(odd(i),:) = oldchrom(odd(i),shuff(:,i));        oldchrom(even(i),:) = oldchrom(even(i),shuff(:,i));    endendnewchrom(odd,:) = (oldchrom(odd,:).* Mask)+(oldchrom(even,:).*(~Mask));newchrom(even,:) = (oldchrom(odd,:).*(~Mask))+(oldchrom(even,:).*Mask);if (rem(Nind,2))    newchrom(Nind,:) = oldchrom(Nind,:);endif (~Npt)    [ans,unshuff] = sort(shuff);    for i = 1:Xops        newchrom(odd(i),:) = newchrom(odd(i),unshuff(:,i));        newchrom(even(i),:) = newchrom(even(i),unshuff(:,i));    endend

⌨️ 快捷键说明

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