计算Python中的累积分布函数(CDF)

如何在Python中计算累积分布函数(CDF)

我想从我拥有的点数组(离散分布)中计算它,而不是使用例如scipy提供的连续分布。


回答:

(我的问题解释可能有误。如果问题是如何从离散PDF转换为离散CDF,那么如果样本是等间隔的,使用np.cumsum除以合适的常数就可以。如果数组不是等间隔的,那么对数组乘以点之间的距离后使用np.cumsum就可以。)

如果你有一个离散的样本数组,并且你想知道样本的CDF,那么你可以简单地对数组进行排序。如果你查看排序后的结果,你会发现最小值代表0%,最大值代表100%。如果你想知道分布中50%的值,只需查看排序数组中间的元素即可。

让我们通过一个简单的例子来更仔细地看一下这个问题:

import matplotlib.pyplot as pltimport numpy as np# 创建一些随机分布的数据:data = np.random.randn(10000)# 对数据进行排序:data_sorted = np.sort(data)# 计算样本的比例值p = 1. * np.arange(len(data)) / (len(data) - 1)# 绘制排序后的数据:fig = plt.figure()ax1 = fig.add_subplot(121)ax1.plot(p, data_sorted)ax1.set_xlabel('$p$')ax1.set_ylabel('$x$')ax2 = fig.add_subplot(122)ax2.plot(data_sorted, p)ax2.set_xlabel('$x$')ax2.set_ylabel('$p$')

这将生成以下图表,其中右侧图表是传统的累积分布函数。它应该反映出点背后过程的CDF,但自然地,由于点的数量是有限的,它并不是完全准确的。

累积分布函数

这个函数很容易反转,具体使用哪种形式取决于你的应用需求。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注