3

我想用高斯混合模型拟合数据集,数据集包含大约 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!我认为这是不合理的,不知道为什么。

有人可以帮我吗?

4

1 回答 1

0

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

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

当然你知道log函数(自然对数)的范围是-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

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

于 2016-09-14T15:40:11.703 回答