我有一个并且我想用最大似然估计Sample
来拟合分布的参数。Beta
此外,我想将其参数截断为 [0,100] 区间。这应该很容易MaximumLikelihoodFactory
,但问题是优化算法失败了。如何更改算法以使其成功?
这是一个简单的示例,其中我生成了一个大小为 100 的样本,并使用setKnownParameter
.
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 的值相对于它们的默认值没有变化。
我不知道为什么会失败,也许是因为它使用了有限差分导数。无论如何,我想自定义优化算法,看看它是否可以改变任何结果,但我不知道该怎么做。