【发布时间】:2021-04-15 21:57:24
【问题描述】:
我有一个Sample,我想用最大似然估计拟合Beta 分布的参数。此外,我想将其参数截断为 [0,100] 区间。 MaximumLikelihoodFactory 应该很容易做到这一点,但问题是优化算法失败了。如何更改算法以使其成功?
这是一个简单的例子,我生成一个大小为 100 的样本,并使用 setKnownParameter 配置参数 a 和 b。
import openturns as ot
# Get sample
beta_true = ot.Beta(3.0, 1.0, 0.0, 100.0)
sample = beta_true.getSample(100)
# Fit
factory = ot.MaximumLikelihoodFactory(ot.Beta())
factory.setKnownParameter([0.0, 100.0], [2, 3])
beta = factory.build(sample)
print(beta)
前面的脚本产生:
Beta(alpha = 2, beta = 2, a = 0, b = 100)
WRN - Switch to finite difference to compute the gradient at point=[0.130921,-2.18413]
WRN - TNC went to an abnormal point=[nan,nan]
算法肯定会失败,因为 alpha 和 beta 的值相对于它们的默认值没有变化。
我不知道为什么会失败,可能是因为它使用了有限差分导数。无论如何,我想自定义优化算法,看看它是否可以改变结果,但我不知道如何做到这一点。
【问题讨论】: