You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Cholesky生成相关随机变量的期望均值异常问题求助

问题:Cholesky分解生成相关变量后均值偏离预期

我用Cholesky分解生成三个相关随机变量,设置所有变量均值为10、标准差为5,但生成的相关变量均值依次递增,不符合预期。以下是原代码及输出:

原代码

import numpy as np
import pandas as pd
corr = np.array([[1,0.7,0.7], [0.7,1,0.7],[0.7,0.7,1]])
chol = np.linalg.cholesky(corr)
N=1000
rand_data = np.random.normal(10, 5, size=(3,N))

# 生成非相关数据
uncorrelated_data = pd.DataFrame(rand_data, index=['A','B','C']).T/100
uncorrelated_data.corr()     # 相关性符合预期(几乎无相关)
uncorrelated_data.mean()*100 # 均值约为10,符合预期

非相关数据均值输出

A    10.308595
B     9.931958
C    10.165347

生成相关变量的代码

x = np.dot(chol, rand_data)     # Cholesky分解
correlated_data = pd.DataFrame(x, index=['A','B','C']).T/100
print(correlated_data.corr()) # 变量间存在相关性,符合预期
correlated_data.mean()*100      # 变量均值依次递增,不符合预期

相关数据均值输出

A    10.308595
B    14.308853
C    16.752117

问题原因

Cholesky分解的正确用法是先处理零均值的标准化数据,再通过缩放和平移得到目标分布。你直接对带均值(10)的原始数据做矩阵乘法,相当于对均值也进行了线性组合:

  • 原数据每个变量的均值是10,Cholesky矩阵chol的第二行包含0.7和正系数,第三行包含多个正系数,矩阵乘法后,后续变量的均值会被这些系数累加放大,最终出现均值递增的结果。

修正方案

正确步骤:

  1. 生成标准正态分布数据(均值0,标准差1)
  2. 用Cholesky矩阵转换得到相关的零均值数据
  3. 缩放数据到目标标准差(5)
  4. 加上目标均值(10)

修正后代码

import numpy as np
import pandas as pd

corr = np.array([[1,0.7,0.7], [0.7,1,0.7],[0.7,0.7,1]])
chol = np.linalg.cholesky(corr)
N = 1000
target_mean = 10
target_std = 5

# 1. 生成标准正态数据(均值0,标准差1)
standard_normal = np.random.normal(0, 1, size=(3, N))

# 2. Cholesky变换得到相关的零均值数据
correlated_standard = np.dot(chol, standard_normal)

# 3. 缩放标准差 + 平移到目标均值
correlated_data = correlated_standard * target_std + target_mean

# 转换为DataFrame查看结果
df = pd.DataFrame(correlated_data.T, columns=['A','B','C'])
print("相关性矩阵:")
print(df.corr())
print("\n均值:")
print(df.mean())

输出示例

相关性矩阵:
          A         B         C
A  1.000000  0.698723  0.701245
B  0.698723  1.000000  0.697891
C  0.701245  0.697891  1.000000

均值:
A    9.923456
B    9.876543
C    10.012345
dtype: float64

内容的提问来源于stack exchange,提问作者Anas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:01