python中是否有一种方法可以根据现有数据的分布来生成随机数据?
以下是我的数据集的统计参数:
Data
count 209.000000
mean 1.280144
std 0.374602
min 0.880000
25% 1.060000
50% 1.150000
75% 1.400000
max 4.140000
由于没有正态分布,因此无法使用np.random.normal来进行。有任何想法吗?
谢谢。
编辑:正在执行boxcox->创建随机正常数据->反向boxcox:
from scipy.stats import boxcox
from scipy.special import inv_boxcox
y,fitted_lambda= boxcox(data['y'],lmbda=None)
sns.distplot(y)
mu, sigma = 0.159053, 0.138988 # mean and standard deviation
s = np.random.normal(mu, sigma, 2153)
y = inv_boxcox(s,fitted_lambda)
where_are_NaNs = np.isnan(y)
y[where_are_NaNs] = np.mean(y)
sns.distplot(y)
ValueError:无法将float NaN转换为整数
错误说是浮动NaN,但是用均值替换NaN后y不包含任何NaN。
通常,现实世界中的数据并不像正态分布或Weibull分布那样完全遵循“精细”分布。
与机器学习类似,从数据点分布中采样通常有两个步骤:
Fit到数据的数据模型。
然后,预测在随机性的帮助下,基于该模型的新数据点。
有几种方法可以估计数据分布并从该估计中抽样:
此外,诸如最大似然估计]之类的方法可以将已知分布(例如正态分布)拟合到数据,但是估计的分布通常比内核密度估计或其他机器学习模型更粗糙。
另请参见我的“ Random Numbers from an Arbitrary Distribution”部分。