生成实际数据分布的随机数?

2024-09-28 21:50:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组真实的数据,我想用这些数据找出一个概率分布,然后利用它们的性质根据它们的pdf生成一些随机点。我的数据集示例如下:

#Mag Weight
21.9786 3.6782
24.0305 6.1120
21.9544 4.2225
23.9383 5.1375
23.9352 4.6499
23.0261 5.1355
23.8682 5.9932
24.8052 4.1765
22.8976 5.1901
23.9679 4.3190
25.3362 4.1519
24.9079 4.2090
23.9851 5.1951
22.2094 5.1570
22.3452 5.6159
24.0953 6.2697
24.3901 6.9299
24.1789 4.0222
24.2648 4.4997
25.3931 3.3920
25.8406 3.9587
23.1427 6.9398
21.2985 7.7582
25.4807 3.1112
25.1935 5.0913
25.2136 4.0578
24.6990 3.9899
23.5299 4.6788
24.0880 7.0576
24.7931 5.7088
25.1860 3.4825
24.4757 5.8500
24.1398 4.9842
23.4947 4.4730
20.9806 5.2717
25.9470 3.4706
25.0324 3.3879
24.7186 3.8443
24.3350 4.9140
24.6395 5.0757
23.9181 4.9951
24.3599 4.1125
24.1766 5.4360
24.8378 4.9121
24.7362 4.4237
24.4119 6.1648
23.8215 5.9184
21.5394 5.1542
24.0081 4.2308
24.5665 4.6922
23.5827 5.4992
23.3876 6.3692
25.6872 4.5055
23.6629 5.4416
24.4821 4.7922
22.7522 5.9513
24.0640 5.8963
24.0361 5.6406
24.8687 4.5699
24.8795 4.3198
24.3486 4.5305
21.0720 9.5246
25.2960 3.0828
23.8204 5.8605
23.3732 5.1161
25.5097 2.9010
24.9206 4.0999
24.4140 4.9073
22.7495 4.5059
24.3394 3.5061
22.0560 5.5763
25.4404 5.4916
25.4795 4.4089
24.1772 3.8626
23.6042 4.7476
23.3537 6.4804
23.6842 4.3220
24.1895 3.6072
24.0328 4.3273
23.0243 5.6789
25.7042 4.4493
22.1983 6.1868
22.3661 5.9132
20.9426 4.8079
20.3806 10.1128
25.0105 4.4296
23.6648 6.6482
25.2780 4.4933
24.6870 4.4836
25.4565 4.0990
25.0415 3.9384
24.6098 4.6057
24.7796 4.2042

我怎么能这么做?我的第一次尝试是用一个多项式拟合二进制数据,并找出每个量级单元中权重的概率分布,但我认为这可能是一个更聪明的方法。例如,使用scipy.stats.rv_continuous从给定分布中采样数据,但我不知道它是如何工作的,而且没有足够的示例。在

更新: 由于有很多注释要使用KDE,所以我使用了scipy.stats.gaussian_kde,得到了以下结果。 enter image description here

我想知道这是否是一个好的概率分布来表示我的数据的性质?首先,我如何测试它,其次,是否有可能将一个以上的高斯kde与{}相匹配?在


Tags: 数据利用示例pdfstats二进制scipy单元
3条回答

(1)如果您对这些数据从中取样的分布有一个概念,那么将该分布拟合到数据中(即,通过最大似然或其他方式调整参数),然后对其进行采样。在

(2)对于更接近经验的方法,随机(等概率)选择一个基准,然后假设它是一个小高斯凸点的中心,并从该凸点取样。这相当于构造了一个核密度估计,并从中取样。你必须为颠簸选择一个标准偏差。在

随机(3)选择完全相同的经验数据。假设实际分布与实际分布相同。在

这些数据代表什么?在

SciPy不会帮助您决定使用哪种类型的分发。这种选择是由数据的来源决定的。一旦您决定了一个发行版(或者您可以尝试几个发行版),那么您就可以轻松地执行类似于scipy.optimize.curve U拟合就你的数据来决定最佳的参数,给进pdf类中scipy.stats公司以便与你的数据相匹配。然后使用scipy连续随机变量从分布中生成新的点。在

此外,多项式不是概率密度函数,因为它不是标准化的(所有x发散的积分)。据我所知,多项式拟合对你没有帮助。在

你试过创建数据的直方图吗?这会让你对密度函数的形状有一个感觉,在这一点上,你可以尝试将数据拟合到一个已知的分布上。一旦你有了一个拟合的分布,你就可以生成伪随机变量来进行“健全性检查”,执行一个像Kolmogorov–Smirnov这样的非参数测试。在

因此,我将采取以下步骤:

  1. 创建直方图
  2. 确定数据的特征(摘要统计等)。在
  3. 尽量适应参数分布。在
  4. 尽量适应非参数分布。在
  5. 进行假设测试,以评估拟合度。在

相关问题 更多 >