1

我想并行化一些使用 MATLABmle例程进行参数拟合的 MATLAB 代码。我进行并行化的原因是我想对mle同一数据集执行多个不同猜测的例程。

初始模拟表明,并行化代码比串行版本(约 500 秒)多花费 200-400 秒,具体取决于我适合的数据集(到时间,我只是在代码的开头和结尾)tictoc我使用parfor不正确吗?

tic    
mitdata;  % load data
data=dmso; % take the 'DMSO' column data

num=length(data);

mm=linspace(.1, 1, 2)'; % mean values
vv=linspace(.1, 2, 2)'; % variance values
N=length(mm);
n=length(vv);

% get all combinations of the initial parameter guesses I want to try
pp = cell(N, n);
for i = 1:N
    for j = 1:n
        pp{(i-1)*N+j} = [mm(i), vv(j)];
    end
end

temp = nchoosek([1:N*n, 1:N*n], 2); 
temp = sort(temp, 2); 
idx = unique(temp, 'rows'); 

P = zeros(length(idx),4);
for ii = 1:length(idx)
    P(ii,:) = [pp{idx(ii,1)},pp{idx(ii,2)}];
end

Pcell = num2cell(P);  % convert P to cell so that it's easier to assign parameter values for initial guess
options = statset('MaxIter',10000, 'MaxFunEvals',10000);

pd = zeros(length(P),4);   % space for best fit parameters
ld = NaN*ones(length(P),1);  % space for likelihood values


parfor i=1:length(P)
    [m1,v1,m2,v2] = Pcell{i,:};
    x0 = [m1,v1,m2,v2];  % initial guess
    [p,conf1]=mle(data,'pdf',@convolv_2invG,'start',x0, 'upperbound', [Inf Inf Inf Inf],'lowerbound',[0 0 0 0],'options',options)
    pd(i,:)=p;  % get best fit parameters from MLE
    l=convolv_2invG(data,p(1),p(2),p(3),p(4));  % use best fit parameters to evaluate pdf
    l=sum(log(l));
    if l<0
        ld(i)=l;  % store likelihood values
    end
end
toc
4

0 回答 0