1

我尝试实现 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。

或者这个问题有另一个简单的解决方案吗?

4

1 回答 1

2

只是您的数据位于实际输入空间的退化子空间中,而 GMM 并不适合这种设置的最通用形式。问题是您使用的经验协方差估计器对于此类数据只会失败(正如您所说 - 您无法反转它)。你平时做什么?您将协方差估计器转换为受约束/正则化的估计器,其中包含:

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

还有更多可能的解决方案,但所有解决方案都基于同一件事 - 以这样的方式进行协方差估计,您可以保证可逆性。

于 2016-03-12T13:16:00.440 回答