如何解决Python:来自概率密度函数数组的归一化累积分布函数 给定固定样本的函数积分方法2.曲线下面积 (AUC) 使用 sklearn.metrics.auc3.1. Romberg 集成
对于连续变量 x 及其概率密度函数 p(x),我有一个 x 值的 numpy 数组 x
和相应 p(x) 值的 numpy 数组 p
。 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
?我认为在某些模块中可能有特定的功能;也许是一个面向统计的模块,具有相关参数(方差、置信区间等)的功能?
解决方法
离散数据点的积分方法
变量 x
仅在您有连续函数形式时才是连续的。如果你有一个
几个离散值(如果你要制作一个离散值的 numpy 数组,就会这样),然后
数组不再连续,因为它无法解析两个连续离散之间的点
x
的值。
因此,假设您实际上拥有 x
和 p
的离散数据点数组,这里
是我的建议。
先熟悉几种数值积分的方法
-
Newton-Cotes Formulas | 代码:
scipy.integrate.newton_cotes
这是包含使用
n
点积分的通用规则。如果我们将n
点公式表示为:newton-cotes(n)
,则-
Trapezoidal Rule:
n = 2
| 代码:scipy.integrate.trapezoid
-
Simpson's Rule:
n = 3
| 代码:scipy.integrate.simpson
-
Simpson's 3/8 Rule:
n = 4
-
Boole's Rule:
n = 5
| 代码:有关想法,请参阅 this。
-
1.使用 scipy.integrate
集成
您可以使用“给定固定样本的积分函数的方法”下列出的任何方法。
INSIGHT 这里重要的是:在trapezoidal rule
你
interpolate
使用 straight line
表示连续两点之间的空间。如果你可以
使用更高阶的多项式(阶 ~ 2、3、4 等)然后可以为您提供更好的结果
一体化。辛普森规则使用二阶多项式 Simpson's Rule - Wolfram MathWorld。
辛普森法则:使用二次多项式对曲线下的面积进行积分 | 展示辛普森法则如何应用于整合的动画 |
来源: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。
2.曲线下面积 (AUC) 使用 sklearn.metrics.auc
积分本质上是曲线下的面积 (AUC)。 Scikit-learn 库提供了一个简单的
替代计算 AUC。在实践中,这也使用梯形规则,所以,我做
看不到任何理由为什么这应该与您已经拥有的有任何/很大不同
使用 numpy.trapz
。
-
文档 -
sklearn.metrics.auc
- 示例:
auc = sklearn.metrics.auc(x,y)
3.考虑使用其他方法
3.1. Romberg 集成
scipy.integrate.romb(y,dx=1.0,axis=- 1,show=False)
- 文档:
scipy.integrate.romb
- 什么是 Romberg 方法?
- Wikipedia
- Romberg 集成背后的数学原理:PDF
- YouTube 视频:Numerical Integration - Romberg Integration - example
参考文献
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。