我正在使用Tensorflow中的高斯混合模型,并且由于非正定的协方差矩阵而遇到Cholesky分解失败的问题。我的数据是多个mfcc帧,但我只使用np.random.rand(10000, 16)
得到类似的失败。
Tensorflow有一个步骤:
# Small value to guarantee that covariances are invertible.
self._min_var = array_ops.diag(
array_ops.ones(array_ops.stack([self._dimensions]))) * 1e-3
# ...
cholesky = linalg_ops.cholesky(self._covs + self._min_var)
但是,值1e-3
不足以稳定矩阵。 1e1
和更高的值确实可以稳定矩阵,但它们会使结果偏差,以至于优化程序在单步后退出。
所以,我的问题:这与我的数据有什么问题,是否有可能规范化我的数据,以便1e-3
的值足以创建一个正定矩阵?