【问题标题】:Generate random data based on existing data根据现有数据生成随机数据
【发布时间】:2020-06-29 11:21:37
【问题描述】:

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 做到这一点。有什么想法吗?

谢谢。

编辑:执行 KDE:

from sklearn.neighbors import KernelDensity
# Gaussian KDE
kde = KernelDensity(kernel='gaussian', bandwidth=0.525566).fit(data['y'].to_numpy().reshape(-1, 1))
sns.distplot(kde.sample(2400))

【问题讨论】:

标签: python random statistics normal-distribution weibull


【解决方案1】:

一般来说,现实世界的数据并不完全遵循正态分布或 Weibull 分布那样的“良好”分布。

与机器学习类似,从数据点分布中采样通常有两个步骤:

  • 使数据模型适合数据。

  • 然后,在随机性的帮助下,预测基于该模型的新数据点。

有几种方法可以根据该估计来估计数据和样本的分布:

  • 核密度估计。
  • 高斯混合模型。
  • 直方图。
  • 回归模型。
  • 其他机器学习模型。

此外,最大似然估计等方法可以将已知分布(如正态分布)拟合到数据中,但估计的分布通常比核密度估计或其他机器学习模型。

另请参阅我的部分“Random Numbers from a Distribution of Data Points”。

【讨论】:

  • 但是我应该如何对单个参数执行回归模型?
  • 回归模型适用于输入和输出数据(例如,特定月份的销售数据),这不是您在此处显示的那种数据。对于您的问题,请忽略有关回归模型的建议。也许对您的数据最有希望的解决方案是kernel density estimation,它支持 scikit-learn。
  • 但是kde也需要参数吧?我的合身需要第二个参数,而我只有一个
  • “参数”是什么意思?
  • 我明白你现在的意思了:核密度估计需要一个带宽参数,它大致是数据点的标准偏差。另请参阅this blog post,了解使用 scikit-learn 确定此带宽参数的方法。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
相关资源
最近更新 更多