Numpy 拟合自定义发行版scipy.stats会导致溢出
我试图将一个广义的误差分布拟合到我拥有的一些数据中。分布形式如下所示: 我尝试了以下实现Numpy 拟合自定义发行版scipy.stats会导致溢出,numpy,scipy,distribution,scipy.stats,Numpy,Scipy,Distribution,Scipy.stats,我试图将一个广义的误差分布拟合到我拥有的一些数据中。分布形式如下所示: 我尝试了以下实现 import numpy as np import scipy.stats as st from scipy.special import gamma class ged(st.rv_continuous): def _pdf(self, x, mu, sigma, kappa): term1 = gamma(3*kappa)/gamma(kappa)
import numpy as np
import scipy.stats as st
from scipy.special import gamma
class ged(st.rv_continuous):
def _pdf(self, x, mu, sigma, kappa):
term1 = gamma(3*kappa)/gamma(kappa)
exponent = (term1 * ((x - mu)/sigma)**2)**(1/(2*kappa))
term2 = np.exp(-exponent)
term3 = 2*sigma*gamma(kappa+1)
fx = term1**0.5 * term2/term3
return fx
ged_inst = ged(name='ged')
data = np.random.normal(size=1000)
ged_inst.fit(data, 0, 0.01, 1)
然而,这给了
OverflowError: (34, 'Numerical result out of range')
如何正确实施此分发?我试图适应真实的数据(而不是问题中生成的玩具正常数据)如评论中所述,为了使这项工作正常,我需要覆盖默认的
\u argcheck
函数。以下工作:
class ged(st.rv_continuous):
def _pdf(self, x, mu, sigma, kappa):
term1 = gamma(3*kappa)/gamma(kappa)
exponent = (term1 * ((x - mu)/sigma)**2)**(1/(2*kappa))
term2 = np.exp(-exponent)
term3 = 2*sigma*gamma(kappa+1)
fx = term1**0.5 * term2/term3
return fx
def _argcheck(self, mu, sigma, kappa):
s = sigma > 0
k = kappa < 1
return s and k
等级ged(标准rv连续):
def_pdf(self、x、mu、sigma、kappa):
term1=伽马(3*kappa)/伽马(kappa)
指数=(term1*((x-mu)/西格玛)**2)**(1/(2*卡帕))
term2=np.exp(-exponent)
term3=2*西格玛*伽马(卡帕+1)
fx=第1条**0.5*第2条/第3条
外汇收益
def_argcheck(自身、mu、sigma、kappa):
s=西格玛>0
k=kappa<1
返回s和k
我认为您必须定义检查。看一看合适的定制分销Ep,这很有效,谢谢你能把它作为一个答案,我支持它好主意,我做得很好。。。