当我尝试将 beta 函数拟合到几个点时,我的 Python 代码出现了一个小问题。问题是要么解决方案不收敛(结果系数为nans
),要么什么都不做(结果与我最初的猜测保持一致),或者它显然是合适的,但是拟合与数据不相似点。我一直在阅读有关 beta 函数和 about 的类似帖子curve_fit
,因为两者都是 stackoverflow 文献中讨论过的问题,但我无法找到解决我遇到的具体问题的方法,所以我想知道你是否能给我一些想法.
我有一组要点:
x = np.array([0.1, 0.3, 0.5, 0.7, 0.9, 1.1])
y = np.array([0.45112234, 0.56934313, 0.3996803 , 0.28982859, 0.19682153,
0.]
然后我尝试gamma
使用以下功能使它们适合它们curve_fit
:
from scipy.optimize import curve_fit
from scipy.special import gamma as gamma
def betafunc(x,a,b,cst):
return cst*gamma(a+b) * (x**(a-1)) * ((1-x)**(b-1)) / ( gamma(a)*gamma(b) )
popt2,pcov2 = curve_fit(betafunc,x,y,p0=(0.5,1.5,0.5))
这就是我的问题出现的地方,因为根据我最初的猜测,我得到popt2=[nan,nan,nan]
, 或popt2=p0
, 或几次值,这些值在绘制时根本不模仿数据。
我也知道 beta 函数适用于 0 < x < 1,所以我尝试重新缩放点,或者只是删除数据的最后一个点,但这也不好。在曲线拟合中添加错误,或者如前所述,更改初始参数也无济于事。另外我认为这可能只是我有3个免费参数和4或5个点的事实,但是,如图所示...... ,
...我已经安装了另一个配置文件(也使用三个自由参数),并且没有问题,所以我不明白为什么这个其他 beta 配置文件不起作用。非常感谢任何指导!