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

时间:2017-01-19 00:21:01

标签: python numpy scipy probability-density

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

kde.integrate_box_1d(lower, 2.0) == 0.05

其中0.05是"临界值"。 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

的正确值

1 个答案:

答案 0 :(得分:1)

这对我来说就像是一根根发现。看看

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,保罗