我尝试实现GMM,但是在em算法中遇到了一些问题。

假设我有用于训练GMM的3D样本(stat1,stat2,stat3)。

我对一个GMM的训练集之一在几乎每个样本中stat1都为“ 0”。在训练期间,我在协方差矩阵的第一行和第一列中得到了非常小的数字(例如“ 1.4456539880060609E-124”),这在EM算法的下一次迭代中导致第一行和第一列中的值为0.0。

我得到这样的东西:

0.0 0.0 0.0
0.0 5.0 6.0
0.0 2.0 1.0


我需要逆协方差矩阵来计算密度,但是由于一列为零,所以我无法做到这一点。

我考虑过回到旧的协方差矩阵(和均值),或者用很小的数字替换每个0。

还是对此问题有另一个简单的解决方案?

最佳答案

只是您的数据位于实际输入空间的退化子空间中,而GMM不太适合这种设置的大多数通用形式。问题在于,您使用的经验协方差估算器对此类数据完全失败(如您所说-您无法对其求逆)。你通常做什么?您可以将约束/正则化的协方差估计量设为:


基于常数的收缩,因此不用Sigma = Cov(X),而是做Sigma = Cov(X)+ eps * I,其中eps是预定义的小常数,而I是单位矩阵。因此,对角线永远不会有零值,并且很容易证明对于合理的ε,这将是不可逆的
拟合得很好的收缩,例如Oracle Covariance EstimatorLedoit-Wolf Covariance Estimator,它们会根据数据本身找到最佳的ε。
将您的高斯约束为例如球面族,即N(m,sigma I),其中sigma = avg_i(cov(X [:, i])是每个维度的平均协方差。以上问题


还有更多可能的解决方案,但是所有解决方案都基于同一事物-chenge协方差估计器,因此您可以保证可逆性。

关于machine-learning - 在算法过程中处理协方差矩阵中的零行/列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35956794/

10-12 19:40