【问题标题】:Dealing with under flow while calculating GMM parameters using EM使用 EM 计算 GMM 参数时处理欠流
【发布时间】:2014-07-01 12:39:41
【问题描述】:

我目前正在 matlab 中对 logspecrum 样本矩阵进行培训,我一直在处理下溢问题。我知道我需要使用 log 来处理下溢。 不过,我仍在为 uderflow 苦苦挣扎,当我计算平均值(mue)时,因为它是负数,我无法使用日志,所以我需要下溢的实际值。 这些是我正在使用的等式:

在 MATLAB 代码中,我在 oreder 中计算 log_tau 以避免下溢,但是在计算 mue 时,我需要 exp(log(tau)) 变为零。 我附上了相关的 MATLAB 代码 **在我称之为变量 alpha 的代码中是 tau ...

for i = 1 : 50
        log_c = Logsum(log_alpha,1) - log(N);
        c = exp(log_c);
        mue = DataMat*alpha./(repmat(exp(Logsum(log_alpha,1)),FrameSize,1));
        log_abs_mue = log(abs(mue));
        log_SigmaSqr = log((DataMat.^2)*alpha) - repmat(Logsum(log_alpha,1),FrameSize,1) - 2*log_abs_mue;
        SigmaSqr = exp(log_SigmaSqr);
        for j=1:N
            rep_DataMat(:,:,j) = repmat(DataMat(:,j),1,M);
            log_gamma(j,:) = log_c - 0.5*(FrameSize*log(2*pi)+sum(log_SigmaSqr)) + sum((rep_DataMat(:,:,j) - mue).^2./(2*SigmaSqr));
        end
        log_alpha = log_gamma - repmat(Logsum(log_gamma,2),1,M);
        alpha = exp(log_alpha);
    end        
    c = exp(log_c);
    SigmaSqr = exp(log_SigmaSqr);

有人知道我如何避免这种情况吗?或者需要在代码中修复什么?

【问题讨论】:

    标签: algorithm matlab signal-processing


    【解决方案1】:

    我所做的是将这一行添加到 MATLAB 代码中:

    mue(isnan(mue))=0; %fix 0/0 problem
    

    还有这个:

    SigmaSqr(SigmaSqr==0)=1;%fix if mue_k = x_k
    

    不确定这是否是最好的解决方案,但似乎可行... 有更好的主意吗?

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2018-08-20
      • 1970-01-01
      • 2015-03-07
      • 2015-02-13
      • 2014-03-09
      • 2018-05-02
      • 2014-08-08
      • 2019-10-27
      相关资源
      最近更新 更多