Python,如何在集成KDE时找到特定值?

Python, How to find a specific value when integrating a KDE?

我有一个代表概率密度函数 (PDF) 的 KDE。 现在,我想获取满足的变量 lower 的值:

kde.integrate_box_1d(lower, 2.0) == 0.05

其中 0.05 是 "critical value"。 2.0为上限。

到目前为止,我使用以下代码解决了它:

def finder(KDE, critical, lower, upper):
    stop = True
    search = lower
    while stop:
        if KDE.integrate_box_1d(search+0.00001,upper) > critical:
            search += 0.0001
        else: stop = False
    return search, KDE.integrate_box_1d(search,upper)

但是,此代码效率低下且不准确。我想知道您是否知道找到 lower

正确值的更好方法

这对我来说看起来像是一维根。看看

scipy.optimize

更具体地说,你可以试试

solver = scipy.optimize.brentq # or brenth or ridder or bisect
def finder(KDE, critical, lower, upper):
    def f(search):
        return KDE.integrate_box_1d(search, upper) - critical
    x, r = solver(f, lower, upper, full_output=True)
    assert r.converged
    return x

HTH,保罗