Python:概率密度函数数组的归一化累积分布函数

2024-05-15 04:05:36 发布

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

对于连续变量x及其概率密度函数p(x),我有一个x值x的numpy数组和一个相应p(x)值p的numpy数组。p(x)未归一化,即在p(x)与x的曲线图中,图形下方的面积不是1。我想为累积分布函数cdf的值计算一个对应的数组。我现在就是这样做的,用梯形法则来近似积分:

p_norm = p/np.trapz(p,x)
cdf = np.array([np.trapz(p_norm[:n],x[:n]) for n in range(len(p_norm))])

结果并不完全准确;cdf的最终值接近1,但不完全是1

有没有更准确、更简单的方法来归一化p和查找cdf?我认为在某些模块中可能有特定的功能;也许是一个面向统计的模块,具有相关参数(方差、置信区间等)的函数


Tags: 模块函数numpy图形normnp数组array
1条回答
网友
1楼 · 发布于 2024-05-15 04:05:36

离散数据点的积分方法

变量x只有在具有连续函数形式时才是连续的。如果你有 很少有离散值(如果要创建一个离散值的numpy数组,就会出现这种情况),然后 阵列不再是连续的,因为它无法解析两个连续离散点之间的点 x的值

因此,假设您实际上有一个xp的离散数据点数组,这里 这是我的建议

先熟悉一些数值积分的方法

一,。使用^{}进行集成

您可以使用“集成给定固定样本函数的方法”下列出的任何方法

洞察这里重要的是: interpolate使用straight line的连续两点之间的空间。如果可以的话 使用高阶多项式(阶数~2、3、4等),这样可以得到更好的计算结果 整合。辛普森规则使用二阶多项式Simpson's Rule - Wolfram MathWorld

^{tb1}$

来源Wikipedia

给定固定样本的函数积分方法

   trapezoid              "Use trapezoidal rule to compute integral."
   cumulative_trapezoid   "Use trapezoidal rule to cumulatively compute integral."
   simps                  "Use Simpson's rule to compute integral from samples."
   romb                   "Use Romberg Integration to compute integral from
                           (2**k + 1) evenly-spaced samples."

🔥 另请参见此快速示例:Calculating the area under a curve given a set of coordinates, without knowing the function

二,。使用sklearn.metrics.auc

积分本质上是曲线下的面积(AUC)。Scikit学习库提供了一个简单的 计算AUC的替代方案。在实践中,这也使用了梯形规则,所以,我这样做 看不出有任何理由说明这与你已有的有什么不同 使用numpy.trapz

  • 文档-^{}
  • 示例:auc = sklearn.metrics.auc(x, y)

三,。考虑使用其他方法< /H2>

3.1。隆伯格积分

scipy.integrate.romb(y, dx=1.0, axis=- 1, show=False)

参考资料

相关问题 更多 >

    热门问题