我想用高斯混合模型拟合数据集,数据集包含大约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!我认为这是不合理的,并且不知道为什么。
有人能帮助我吗?
答案 0 :(得分: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]限制。那么,aposteriori函数是一个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
因此,我宁愿假设您的数据集包含多个重复(或非常接近)的值。