【问题标题】:Can I create a multivariate_normal matrix using dask?我可以使用 dask 创建一个 multivariate_normal 矩阵吗?
【发布时间】:2021-01-02 00:44:12
【问题描述】:

this post 有点相关,我正在尝试在dask 中复制multivariate_normal: 使用 numpy,我可以使用以下方法创建具有指定协方差的多元法线矩阵:

import numpy as np
n_dim = 5
size = 300
A = np.random.randn(n_dim, n_dim) # a matrix
covm = A.dot(A.T) # A*A^T is positive semi-definite, as a covariance matrix
x = np.random.multivariate_normal(size=300, mean=np.zeros(len(covm)),cov=covm) # generate data

然而,我需要一个包含n_dim = 4_500_000size = 100000 的非常大的矩阵。对于 CPU 和内存,这将是昂贵的计算。幸运的是,我可以访问 Cloudera DataScience Workbench 集群并尝试使用 dask 解决这个问题:

import dask.array as da
n_dim = 4_500_000
size = 100000
A = da.random.standard_normal((n_dim, n_dim))  
covm = A.dot(A.T)
#x = da.random.multivariate_normal(size=300, mean=np.zeros(len(covm)),cov=covm) # generate data

documentation 中,我找不到任何似乎可以满足我需要的功能。有谁知道解决方案/解决方法,可能使用xarray 或在集群上运行的任何其他模块?

【问题讨论】:

    标签: python pyspark dask python-xarray dask-distributed


    【解决方案1】:

    目前的一个工作是使用cholesky 分解。请注意,任何协方差矩阵 C 都可以表示为 C=G*G'。然后,如果 y 是标准正态,则 x = G'*y 与 C 中指定的相关(参见 StackExchange Mathematic 上的 excellent post)。在代码中:

    Numpy

    n_dim =4
    size = 100000
    A = np.random.randn(n_dim, n_dim)
    covm = A.dot(A.T)
    
    x=  np.random.multivariate_normal(size=size, mean=np.zeros(len(covm)),cov=covm)
    ## verify numpys covariance is correct
    np.cov(x, rowvar=False)
    covm
    

    黎明

    ## create covariance matrix
    A = da.random.standard_normal(size=(n_dim, n_dim),chunks=(2,2))
    covm = A.dot(A.T)
    
    ## get cholesky decomp
    L = da.linalg.cholesky(covm, lower=True)
    
    ## drawn standard normal 
    sn= da.random.standard_normal(size=(size, n_dim),chunks=(100,100))
    
    ## correct for correlation
    x =L.dot(sn.T)
    x.shape
    
    ## verify
    covm.compute()
    da.cov(x, rowvar=True).compute()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 2021-10-30
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多