matlab - 来自 matlab "fitgmdist"函数的不合理 [正] 对数似然值

标签 matlab mixture-model

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

有人能帮帮我吗?

最佳答案

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

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

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

关于matlab - 来自 matlab "fitgmdist"函数的不合理 [正] 对数似然值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34705665/

相关文章:

Matlab - 冲浪和轮廓3,裁剪顺序?

Matlab-将稀疏矩阵转换为复稀疏矩阵

R:计算特殊定义的Skew-T分布的概率密度函数

python - curve_fit 似乎无法拟合高斯总和

pymc - 如何在PyMC中建模3个法线的混合?

normalization - 特征缩放对精度的影响

matlab - 如何在不使用 plot 的情况下将范围保存到图像文件?

matlab - 在 matlab 中实现树的最佳方法是什么?

matlab - 表格单元格只能通过双击进行编辑

python - tensorflow 中的参数化混合密度网络协方差