machine-learning - 在 em 算法期间处理协方差矩阵中的零行/列

标签 machine-learning mixture-model expectation-maximization

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

假设我有 3D 样本(stat1、stat2、stat3),我用它们来训练 GMM。

我的其中一个 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 是单位矩阵。因此,对角线上永远不会有零值,并且很容易证明,对于合理的 epsilon,这将是可逆的
  • 非常合身的缩水,例如 Oracle Covariance EstimatorLedoit-Wolf Covariance Estimator它根据数据本身找到最佳的 epsilon。
  • 将高斯函数限制为球形高斯函数,例如 N(m, sigma I),其中 sigma = avg_i( cov( X[:, i] ) 是每个维度的平均协方差。这将您限制为球形高斯函数,并且也解决了上述问题

还有更多可能的解决方案,但都基于相同的东西 - chenge 协方差估计器,以这样的方式保证可逆性。

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

相关文章:

r - 关于如何使用 ggplot2 绘制 mixEM 类型数据的任何建议

algorithm - Google "Did you mean?"算法是如何工作的?

matlab - 使用经过训练的高斯混合模型标记新数据

matlab - 使用高斯混合模型对图像进行聚类

python - Numpy __array_prepare__ 错误

python - Baum Welch(EM 算法)似然 (P(X)) 不是单调收敛的

machine-learning - 安装时编译caffe文件(Makefile.config)时出现错误

machine-learning - kNN 最先进的实现

python - 使用 Google Colab 改回 CPU