如何解决在一个图中拟合对数正态和法线
为了比较它们,我必须将对数正态和法线拟合到我的数据上。我能够使我的数据正常显示,如下图所示。我很难添加拟合的对数正态
这是我的代码:
mu,std = st.norm.fit(data)
plt.hist(data,50,density=True,facecolor='orange',alpha=0.75)
xmin,xmax = plt.xlim()
x = np.linspace(xmin,xmax,100)
p = st.norm.pdf(x,mu,std)
plt.plot(x,p,'k',linewidth=1.5)
plt.show()
解决方法
stats.lognorm
的工作原理类似于$match : {
"process_name" : {
$in: ["a","b"]
}
}
,但是使用了3个参数。具有3个参数使分布更难拟合,并且process_name
通常被赋予初始猜测为零。没有这样的初步猜测,拟合度通常很差。请注意,除了猜测之外,还可以将固定的stats.norm
设置为loc
。
loc
PS:尝试使用lognorm.fit(data,floc=0)
可以安装的Paul H's library:
import numpy as np
from scipy import stats as st
import matplotlib.pyplot as plt
data = 60 + (np.random.randn(50,200)+0.2).cumsum(axis=0).ravel()
lshape,lloc,lscale = st.lognorm.fit(data,loc=0)
mu,std = st.norm.fit(data)
plt.hist(data,50,density=True,facecolor='orange',alpha=0.75)
xmin,xmax = plt.xlim()
x = np.linspace(xmin,xmax,500)
plt.plot(x,st.norm.pdf(x,mu,std),color='dodgerblue',linewidth=1.5,label='gaussian normal')
plt.plot(x,st.lognorm.pdf(x,lshape,loc=lloc,scale=lscale),color='limegreen',label='lognormal')
plt.legend()
plt.autoscale(enable=True,axis='x',tight=True)
plt.show()
乍一看,对于这些示例数据,它给出的曲线与pip install paramnormal
相同(但参数化不同)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。