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
正确值的更好方法
这对我来说看起来像是一维根。看看
更具体地说,你可以试试
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,保罗
我有一个代表概率密度函数 (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
这对我来说看起来像是一维根。看看
更具体地说,你可以试试
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,保罗