【问题标题】:Unreasonable [positive] log-likelihood values from matlab "fitgmdist" functionmatlab“fitgmdist”函数中不合理的[正]对数似然值
【发布时间】:2016-04-14 19:48:19
【问题描述】:

我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000):

gm = fitgmdist(data, 1000, 'Options', statset('Display', 'iter'), 'RegularizationValue', 0.01);

我得到以下输出:

  iter      log-likelihood
   1    -6.66298e+07
   2    -1.87763e+07
   3    -5.00384e+06
   4    -1.11863e+06
   5          299767
   6          985834
   7     1.39525e+06
   8     1.70956e+06
   9     1.94637e+06

对数似然大于 0!我觉得不合理,不知道为什么。

有人可以帮我吗?

【问题讨论】:

    标签: matlab mixture-model


    【解决方案1】:

    首先,数据集有多大不是问题。 下面是一些使用非常小的数据集产生类似结果的代码:

    options = statset('Display', 'iter');
    x = ones(5,2) + (rand(5,2)-0.5)/1000;
    fitgmdist(x,1,'Options',options);
    

    这会产生

    iter     log-likelihood
     1       64.4731
     2       73.4987
     3       73.4987
    

    当然你知道对数函数(自然对数)的范围是从-inf 到+inf。我猜你的问题是你认为日志的输入(即后验函数)应该以 [0,1] 为界。好吧,后验函数是一个pdf函数,这意味着对于非常密集的数据集,它的值可以非常大。

    PDF 必须是正数(这就是我们可以对它们使用日志的原因)并且必须积分为 1。但它们不受 [0,1] 的限制。

    您可以通过降低上述代码中的密度来验证这一点

    x = ones(5,2) + (rand(5,2)-0.5)/1;
    fitgmdist(x,1,'Options',options);
    

    这会产生

    iter     log-likelihood
     1      -8.99083
     2      -3.06465
     3      -3.06465
    

    所以,我宁愿假设您的数据集包含多个重复(或非常接近)的值。

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2019-06-14
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多