【问题标题】:Nan values from Calculation normal distribution of a data in MATLAB?在 MATLAB 中计算数据的正态分布的 Nan 值?
【发布时间】:2012-12-05 03:38:10
【问题描述】:

我正在使用 Gaussian Mixture 进行 EM 算法,但问题是我的数据非常空闲,因此这些值的值非常小,接近于零。

这是有问题的部分

for i=1:ncomp,
  **logdenom = -log((2*pi)^(dim/2)*sqrt(abs(det(Cov(:,:,i)))));**  
  dist = mahalan(X,Mean(:,i),Cov(:,:,i));
  y(i,:) = logdenom-0.5*dist;
end

星号线是问题所在。在计算时,它在结果 NAN 值之后返回“inf”值。我该如何处理这个问题。我也计算它没有对数函数

for i=1:ncomp,
  dist = mahalan(X,Mean(:,i),Cov(:,:,i));
  y(i,:) = exp(-0.5*dist)/sqrt((2*pi)^dim*det(Cov(:,:,i))); % problem
end

但问题是一样的,因为 Cov 的值太小了。

【问题讨论】:

    标签: matlab gaussian pattern-recognition


    【解决方案1】:

    在这种情况下防止infs 的一种方法是简单地使用

     logdenom = -log( eps + (2*pi)^...  )
    

    我发现这个 v 对于最大似然估计中的稀疏数据很有用。我不知道它在 EM 中是否有用!基本上,零项会变成类似于+36,所以不会太大,但它仍然允许放大您需要log 的小概率。

    【讨论】:

      猜你喜欢
      • 2015-03-24
      • 2013-03-21
      • 2023-03-15
      • 1970-01-01
      • 2021-11-21
      • 2015-09-02
      • 1970-01-01
      • 2016-06-11
      • 2017-07-24
      相关资源
      最近更新 更多