计算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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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