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

📄 gettwodlatenttrace.m

📁 Continuous Profile Models (CPM) Matlab Toolbox.
💻 M
字号:
% function trace = getTwoDLatentTrace(qmzD,gammas,G,lambda)%% Given the posterior over states (gammas), and the model% parameters, do a single 'MStep' per M/Z slice to find the% latent trace.% NOTE: lambda here will need to be much less than with the% 1D latent trace since it should be proportional to the magnitude% of the trace, which should be much less here, on a M/Z by M/Z basis.% In fact, in an ideal world, we would have a different lambdas for% different M/Z slices.function trace = getTwoDLatentTrace(qmzD,gammas,G,lambda)% qmzD=qmz(1:5); lambda=10^7/2000; G=newG; gammas=alphas.*betas;%% M-step-like update likelihood, with a smoothing prior%% on the latent trace.K=G.numSamples;M=G.numTaus;N=G.numRealTimes;numMZ = size(qmzD{1},2);trace = zeros(G.numTaus,numMZ);X = zeros(M,M+1);%% Now do update as in 1D training, but do for each M/Z%% However, a large part of the required matrix is the same%% for each M/Z slice.  We do this first, then loop over M/Zfor jj=1:M    validStates=find(G.stateToScaleTau(:,2)==jj);              vs{jj}=validStates;    %%%% X(j,j)    %%sum over gammas    gammaSum1=zeros(length(validStates),G.numSamples);    for xp=1:K      tempGam = gammas{xp}; %numStates x numRealTimes      %a=sum(tempGam(validStates,:),2); whos a; clear a;      %whos gammaSum1 validStates      gammaSum1(:,xp) = sum(tempGam(validStates,:),2);    end    %gammaSum = squeeze(sum(gammas(validStates,:,:),2));    repSigs  = repmat(G.sigmas,[length(validStates),1]);    sumSigs  = sum(repSigs.*gammaSum1,2)';    tempScales = 2.^(G.scales(G.stateToScaleTau(validStates,1)));    termJJ   = sum(tempScales.*tempScales.*sumSigs);    X(jj,jj) = 4*-lambda - termJJ;    if (jj~=M)      X(jj,jj+1) = -2*-lambda;    end    if (jj~=1)      X(jj,jj-1) = -2*-lambda;    endend        %% correct the boundary conditionsX(1,1) = X(1,1) - 2*-lambda;X(M,M) = X(M,M) - 2*-lambda;%samples=reshape(cell2mat(qmzD'),G.numRealTimes,G.numSamples,numMZ);%whos samples%a=squeeze(samples(:,3,:)); imstats(a-qmz{3})%%%% X(j,M+1)  tic;for mz=1:numMZ      %% in trainFBHMM, samples2 = (numSamples,numRealTimes)  %samples2=samples(:,:,mz);  if (mod(mz,50)==0)    display(['On ' num2str(mz)]);    toc;tic;  end    for jj=1:M    validStates=vs{jj};    %repsamples = repmat(samples2,[1,1,length(validStates)]);    %repsamples = permute(repsamples,[3,1,2]);    %gammaSum   = squeeze(sum(gammas(validStates,:,:).*repsamples,2));    gammaSum2=zeros(length(validStates),G.numSamples);    for xp=1:K      samples=qmzD{xp}; %numRealTimes x numMZ      samples2=samples(:,mz);      repsamples = repmat(samples2,[length(validStates),1]);      tempGam = gammas{xp}; %numStates x numRealTimes      gammaSum2(:,xp) = sum(tempGam(validStates,:),2);    end        sumSigs    = sum(repSigs.*gammaSum2,2)';    X(jj,M+1) = sum(tempScales.*sumSigs);         %mzTrace = C'/XX; %B/A ~ B*inv(A)  I have ZX=C, Z=C*inv(X)  end  mzTrace = -X(:,M+1)'/X(:,1:M);  trace(:,mz)=mzTrace';end

⌨️ 快捷键说明

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