Python 使用最大似然估计实现的曲线拟合不起作用
为了曲线拟合的目的,我正在为离散计数数据实现一个最大似然估计,使用Python 使用最大似然估计实现的曲线拟合不起作用,python,scipy,curve-fitting,statsmodels,log-likelihood,Python,Scipy,Curve Fitting,Statsmodels,Log Likelihood,为了曲线拟合的目的,我正在为离散计数数据实现一个最大似然估计,使用curve\u fit的结果作为minimize的起点。我为多个发行版定义并尝试了这些方法,但为了简单起见,将只包括一个,即logseries发行版 此时,我还尝试了statsmodels方法中的以下方法: statsmodels.discrete.discrete_model.fit statsmodels.discrete.count_model.fit statsmodels.base.model.GenericLikeli
curve\u fit
的结果作为minimize
的起点。我为多个发行版定义并尝试了这些方法,但为了简单起见,将只包括一个,即logseries发行版
此时,我还尝试了statsmodels方法中的以下方法:
#导入几个包
将numpy作为np导入
从scipy.optimize导入曲线\u拟合
从scipy.optimize导入最小化
从scipy导入统计信息
从numpy导入日志
将numpy作为np导入
将matplotlib.pyplot作为plt导入
#给定数据
x=np.arange(1,28,1)
y=np.数组([188991042762804281273618351158746467328201129,65,69,39,21,15,10,3,3,1,1,1,1,1,1,1,1,1])
#定义自定义分发
def记录器(x,p):
返回(-p**x)/(x*log(1-p))
#进行最小二乘曲线拟合
定义lsqfit(x,y):
cf_结果=曲线拟合(Logser,x,y,p0=0.7,界限=(0.5,1),方法='trf')
返回cf_结果
param_guess=lsqfit(x,y)[0][0]
打印(参数猜测)
#执行自定义MLE定义,使用scipy最小化函数最小化
定义回归(参数猜测):
yhat=Logser(x,param#u guess)#基于参数值的预测
sd=1#最初猜测用于拟合回归曲线周围的正态分布误差
#接下来,我们翻转贝叶斯问题
#计算平均值周围正态分布的观测值的PDF(yhat)
#标准偏差为sd
negLL=-np.sum(stats.norm.logpdf(y,loc=yhat,scale=sd))#概率密度函数的对数
返回内格尔
结果=最小化(MLE回归,参数猜测,方法='L-BFGS-B',界限=(0.5,1.0),选项={'disp':True})
最终参数=结果['x']
打印(最终参数)
我已约束优化器,使其结果与我期望的结果相似(参数值约为0.8或0.9)。。该算法输出零,否则我认为这是由于缩放。当我通过添加比例因子将方程更改为“scale*(-p**X)/(X*log(1-p)),我在不使用任何边界的情况下得到以下值:p=9.0360470735534726E-01和scale=5.1189277041342692E+04,得出以下结果:
我对p的拟合值实际上是0.9。我认为这是由于缩放。当我通过添加比例因子将方程更改为“scale*(-p**X)/(X*log(1-p)),我在不使用任何边界的情况下得到以下值:p=9.0360470735534726E-01和scale=5.1189277041342692E+04,得出以下结果:
我对p的拟合值实际上是0.9。谢谢James!!在pdf中添加缩放项是否可以优化所有发行版??任何关于比例重要性的理论,以及为什么会发生这种情况?我现在已经老了,从经验中知道,比例因子、偏移量或两者有时都能帮助解决困难的回归问题——因此我尝试向方程中添加比例因子,它起到了作用,得到了预期的p=0.9。我没有应用任何理论,而是我那腐烂的旧大脑似乎觉得值得一试。谢谢詹姆斯!!在pdf中添加缩放项是否可以优化所有发行版??任何关于比例重要性的理论,以及为什么会发生这种情况?我现在已经老了,从经验中知道,比例因子、偏移量或两者有时都能帮助解决困难的回归问题——因此我尝试向方程中添加比例因子,它起到了作用,得到了预期的p=0.9。我没有运用任何理论,相反,我腐朽的旧大脑似乎认为它值得一试。