scipy.stats.lognorm使用心得
1.定义若logx服从正态分布,则x服从对数正态分布2.参数设置lognorm.rvs(s, loc=0, scale=1, size=1)中的参数s,loc,scale, 要记住:loc和scale并不是我们通常理解的对数变化后数据的均值mu和标准差sigmalognorm.pdf(x, s) = 1 / (s*x*sqrt(2*pi)) * exp(-1/2*(log(x)/s)**2) fo
1.定义
若logx服从正态分布,则x服从对数正态分布
2.参数设置
lognorm.rvs(s, loc=0, scale=1, size=1)中的参数s,loc,scale, 要记住:loc和scale并不是我们通常理解的对数变化后数据的均值mu和标准差sigma
lognorm.pdf(x, s)
1 / (s*x*sqrt(2*pi)) * exp(-1/2*(log(x)/s)**2) for x > 0, s > 0.
m1=lognorm.pdf(x, s=estimated_sigma,scale=exp(estimated_mu))
m2=1 / (s*x*sqrt(2*pi)) * exp(-1/2*((log(x)-estimated_mu)/s)**2)
(以上两种计算最后差异可以忽略不计)
lognorm takes s as a shape parameter.
The probability density above is defined in the “standardized” form. To shift and/or scale the distribution use the loc and scale parameters. Specifically, lognorm.pdf(x, s, loc, scale) is identically equivalent to lognorm.pdf(y, s) / scale with y = (x - loc) / scale.
logX服从n(mu,sigma^2),需要令lognorm中的参数s=sigma,loc=0,scale=exp(mu)
lognorm.pdf(x, 0.55, 0, numpy.exp(4.29))
where the arguments are (x, shape, loc, scale)
3.使用.fit进行参数估计
import
numpy as np
from
scipy
import
stats
x
=
2
*
np.random.randn(
10000
)
+
7.0
# normally distributed values
y
=
np.exp(x)
# these values have lognormal distribution
s, loc, scale
=
stats.lognorm.fit(y, floc=
0
)
estimated_mu
=
np.log(scale)
estimated_sigma
=
s
s, loc, scale = lognorm.fit([k if k>0 else k+1 for k in train_Ds[i]],floc=0)# floc=-0.00000001)
estimated_mu = np.log(scale)
estimated_sigma = s
mu_sig[i].extend([estimated_mu,estimated_sigma])
或者
与stats.lognorm
匹配的另一种方法是匹配log(data)
使用stats.norm.fit
:
logdata = np.log(data)
estimated_mu, estimated_sigma = stats.norm.fit(logdata)
python中的对数正态分布 - 问答 - Python中文网https://stackoverflow.com/questions/18534562/scipy-lognormal-fittinghttps://stackoverflow.com/questions/18534562/scipy-lognormal-fittingFitting Lognormal Data
4.其他方法
更多推荐
所有评论(0)