我试图适应对数正态分布:
import numpy as np
import scipy.stats as sp
from scipy.optimize import curve_fit
def pdf(x, mu, sigma):
return (np.exp(-(np.log(x) - mu)**2 / (2 * sigma**2)) / (x * sigma * np.sqrt(2 * np.pi)))
x_axis = [5e5,1e6,2e6,5e6,6e6]
y_axis = [0,0.2,0.4,0.6,0.8]
curve_fit(pdf,x_axis,y_axis,maxfev=10000,)
返回以下内容:
C:\Anaconda3\Lib\site-packages\scipy\optimize\minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
Out[66]:
(array([ 1., 1.]), array([[ inf, inf],
[ inf, inf]]))
这些结果看起来并不合适。我知道只有五个数据点,但是当我在excel中使用求解器时,我得到0.1536和3.1915的参数,这不是完美的,但它更接近。
编辑:尝试使用cdf
def cdf(x,mu,sigma):
return sp.norm.cdf((np.log(x)-mu)/sigma)
curve_fit(cdf,x_axis,y_axis,)
这会返回与上面相同的错误