【问题标题】:Inaccurate results while reconstructing covariance matrix from np.random.multivariate_normal从 np.random.multivariate_normal 重建协方差矩阵时结果不准确
【发布时间】:2019-01-09 12:14:37
【问题描述】:

我需要模拟二维正态分布的数据以及相关参数。为此,我使用了np.random.multivariate_normal 和一个协方差矩阵,该矩阵将我的平方 sigma 作为对角线条目,以及其他地方的 sigmas 和相关系数的乘积(我希望这是生成具有相关性的数据的正确方法).

但恐怕,我不明白如何从生成的数据中正确重建协方差矩阵。 我尝试使用np.cov 获取协方差矩阵,并尝试将生成的数据减少到零均值形式,然后通过该数据的点积创建协方差矩阵。

这是我的代码:

import numpy as np
from matplotlib import pyplot as plt


class NormalDist:
    def __init__(self, *args):
        self.mu = args[:2]
        self.sigma = args[2:4]
        self.dist, self.cov = None, None

    def generate(self, rho=0., n=100):
        """ generate distributed data """
        self.cov = np.diag(np.array(self.sigma, np.float))
        self.cov = np.power(self.cov, 2)
        corr = rho * self.sigma[0] * self.sigma[1]
        self.cov[0, 1], self.cov[1, 0] = corr, corr
        self.dist = np.random.multivariate_normal(self.mu, self.cov, n)


if __name__ == '__main__':
    gauss = NormalDist(1, 2, 4, 9)
    gauss.generate(1/3)

    # covariance matrix from np.cov
    print(np.cov(gauss.dist.T), '\n')

    # covariance matrix from reducing data to zero-mean form
    zero_mean = gauss.dist - gauss.dist.mean(axis=0, keepdims=True)
    print(zero_mean.T @ zero_mean)

输出:

[[13.84078951  9.60607718]
 [ 9.60607718 79.33658308]] 

[[1370.23816181  951.00164066]
 [ 951.00164066 7854.32172506]]

【问题讨论】:

    标签: python numpy pca covariance


    【解决方案1】:

    你只需要除以样本大小,即:

    def np_mv_cov(X):
        X = X - X.mean(axis=0, keepdims=True)
        return (X.T @ X) / (X.shape[0] - 1)
    

    可以使用上述代码的简化版本进行测试:

    import numpy as np
    
    dist = np.random.multivariate_normal([1, 2], [[16, 12], [12, 81]], 100)
    
    d = np.cov(dist.T) - np_mv_cov(dist)
    
    print(np.max(np.abs(d)))
    

    给我 ~1.42e-14。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 2020-04-13
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多