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

Python中如何创建可自定义标准差的相关变量?

问题原因

你当前使用的cov_matrix本质是相关系数矩阵,对角线元素对应各变量的方差,方差为1时标准差自然为1,所以生成的数据离散度不符合预期。

实现方案

要保留预设的变量间相关关系,同时自定义各变量的标准差,可通过「标准差对角矩阵 × 相关矩阵 × 标准差对角矩阵」的公式计算得到真实可用的协方差矩阵,示例代码如下:

import numpy as np
import pandas as pd

# 按Height、Weight、Age、Income的顺序,定义各变量的目标标准差
# 可根据你的需求调整各数值,示例中Height标准差设为30
target_stds = np.array([30, 10, 8, 8000])

# 你原来定义的相关关系保持不变
corr_matrix = [
    [1, 0.7, 0, 0],
    [0.7, 1, 0, 0],
    [0, 0, 1, 0.4],
    [0, 0, 0.4, 1]
]

# 构造标准差对角矩阵,计算真实协方差矩阵
std_diag = np.diag(target_stds)
cov_matrix = std_diag @ corr_matrix @ std_diag

# 生成模拟数据,均值保持你原来的设置即可
correlated = np.random.multivariate_normal([165, 65, 30, 15000], cov_matrix, size=250)
data = pd.DataFrame({
    "Height": correlated[:, 0],
    "Weight": correlated[:, 1],
    "Age": correlated[:, 2],
    "Income": correlated[:, 3]
})

验证

运行以下代码即可查看各变量的实际标准差,Height的标准差会接近你设置的30,且变量间的相关系数和你预设的一致:

print(data.std())

可选优化

如果需要Age、Income这类变量不能为负值,可以在生成数据后增加截断逻辑,或改用对数正态分布生成对应变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:45:00