从python中的多元范数中抽样时出现正半正定误差?

时间:2017-10-13 17:08:50

标签: python numpy matrix tensorflow

注意:这个问题实际上发生在tensorflow内部,导致样本不完全来自真正的pdf。然而,原则在numpy中是相同的,我的目的是理解以下警告。

即,我试图从python中的多变量法线中进行采样。那是

np.random.multivariate_normal(mean = some_mean_vector, cov = some_cov_matrix)

当然,任何有效的协方差矩阵必须是正半正定的。然而,一些用于采样的协方差矩阵(通过每个测试得到正半确定性),给出以下警告

/usr/local/lib/python3.6/site-packages/ipykernel/__main__.py:1: RuntimeWarning: covariance is not positive-semidefinite.

一个这样的矩阵是

A = array([[  1.00000359e-01,  -3.66802835e+00],[ -3.66802859e+00,   1.34643845e+02]], dtype=float32)

我可以在没有警告的情况下找到cholesky分解和特征值(最小的特征值是7.42144039e-05)。

任何人都可以帮忙告诉我为什么会这样吗?

(在tensorflow中,我只是提供上述矩阵的cholesky分解,并接收不精确的样本,这会混淆我尝试做的所有事情)。

1 个答案:

答案 0 :(得分:1)

对此pull request的讨论提供了有关触发此警告的内容的一些信息。根据{{​​3}}:

   # Also check that cov is positive-semidefinite. If so, the u.T and v
   # matrices should be equal up to roundoff error if cov is
   # symmetrical and the singular value of the corresponding row is
   # not zero. We continue to use the SVD rather than Cholesky in
   # order to preserve current outputs. Note that symmetry has not
   # been checked.

在您的情况下,基于SVD和Cholesky的测试似乎给出了不同的结果。