Python - 基于现有数据集生成相关数据集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - 基于现有数据集生成相关数据集相关的知识,希望对你有一定的参考价值。

所以我有一组数据,我想要生成另一组数据,这些数据具有相同大小的数据,其集合均值是正态分布的,与我已有的数据相关。

我查找了stats.multivariate_normal和cholesky分解但生成了两组(或更多组)数据。反正是否只根据Python中已存在的东西生成一组数据?

# 100 random samples
x = stats.norm.rvs(loc=0, scale=1, size=100)

# What we got
n = 100
std_x = x.std()
mean_x = 0
mean_y = 1

# What I need
std_y = ?

# Means of x and what we want for y
mean_xy = [0, 1]

#Desired correlation matrix
r= [[1,0.83], [0.83,1]]

# How do I generate 100 random samples of y with a normal distribution with a mean 1 that has a 0.83 correlation with x?

感谢您的任何帮助!!!!

答案

请参阅维基百科文章中有关the bivariate normal distribution的多元正态分布的部分。你的符号中有sigma_1 = 1,sigma_2 = 1,rho = 0.83,mu_1 = 1,mu_2 = 0(请注意,在你的符号中,x_1 = y,x_2 = x表示你的符号)。

所以E(x_1 | x_2)= mu_1 + rho次sigma_1 / sigma_2次(x_2 - mu_2)= 1 + 0.83次x_2替换值后。条件方差var(x_1 | x_2)= 1-rho ^ 2 = 1-0.83 ^ 2(即对于所有x_2也相同)。 (对于mu_1 = mu_2 = 0,规定了条件方差,但无论mu_1和mu_2是什么,它都是相同的。)

所以对于你的问题,把x作为给定,然后计算mean_y = 1 + 0.83乘x,并且std_y = sqrt(var(y | x))= sqrt(1 - 0.83 ^ 2),并生成y = mean_y + std_y次N(0,1),其中N(0,1)=来自正态分布的样本,均值为0且方差为1。

以上是关于Python - 基于现有数据集生成相关数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何从现有模型生成与之配合的数据

如何根据 Python 中的索引时间序列条件将新数据集附加到现有数据集

TextInfoExp:自然语言处理相关实验(基于sougou数据集)

将更多数据集附加到现有 Hdf5 文件中,而不删除其他组和数据集

基于 Iris 数据集的 Python 模糊聚类

DBUnit 自动数据集生成