首页 > 解决方案 > 平均多元正态分布,沿向量扩展协方差

问题描述

如果我有两个单独的多元正态随机变量:

from scipy.stats import multivariate_normal
import numpy as np

cov0=np.array([
    [1,0,0],
    [0,1,0],
    [0,0,1]
])
mean0 = np.array([1,1,1])
rv3d_0 = multivariate_normal(mean=mean0, cov=cov0)

cov1=np.array([
    [1,0,0],
    [0,1,0],
    [0,0,1]
])
mean1 = np.array([4,4,4])
rv3d_1 = multivariate_normal(mean=mean1, cov=cov1)

然后我有兴趣创建一个介于这两者之间的新随机变量:

mean_avg = (mean0+mean1)/2
cov_avg = (cov0+cov1)/2
rv3d_avg = multivariate_normal(mean=mean_avg, cov=cov_avg)

# I can then plot the points generated by:
rv3d_0.rvs(1000)
rv3d_1.rvs(1000)
rv3d_avg.rvs(1000)

然而,当查看生成的点时,协方差可以预见地与两个分量相同。但是,与沿正交向量的协方差相比,我想要的是沿向量(mean1-mean0)的协方差更大。我认为也许取协方差的平均值不是正确的技术?欢迎任何建议,谢谢!

标签: pythonscipystatisticsprobability

解决方案


这是一个有趣的问题。这样看:协方差分量有一些特定的方向,即 mean1 - mean0 是一个方向,与 mean1 - mean0 正交的平面包含其他方向。在这些方向上,您要指定变化的幅度,即它是正交平面中的某个值(比如说 FOO),而在方向 mean1 - mean0 上则更多(假设是 FOO 的 100 倍)。

您可以通过 Gram-Schmidt 算法或其他方法找到正交平面的基础。此时您可以构造一个协方差矩阵:让 S = 您找到的方向的列(即 mean1 - mean 加上正交平面的基础),让 D = 100 FOO, FOO, FOO, 的对角矩阵。 ..,对角线上的 FOO。现在 SDS^T(其中 S^T 是矩阵转置)是具有所需属性的正定矩阵。

您也许可以避免 Gram-Schmidt,但在任何情况下您的目标都是相同的:指定您想要的属性,然后构造一个矩阵来满足它们。


推荐阅读