Проблема
Непосредственная проблема, с которой вы столкнулись, заключается в том, что ваше состояние действительно очень плохое.Вы можете увидеть это, если вы установите шкалу x и y на графике для регистрации, как с plt.xscale('log')
и plt.yscale('log')
.Это позволяет вам видеть как гистограмму, так и ваши данные на одном графике:
, поэтому она отклоняется на много порядков в обоих направлениях.
Исправление
Весь ваш подход к генерации выборки из распределения вероятности, представленной stats.lognorm
, и ее подгонке был неверным.Вот правильный способ сделать это, используя те же параметры для распределения lognorm, которые вы указали в своем вопросе:
from matplotlib import pyplot as plt
from scipy import stats as scistats
import numpy as np
plt.figure(figsize=(12,7))
realparam = [.1, 0, np.exp(10)]
# generate pdf data around the mean value
m = realparam[2]
x = np.linspace(m*.6, m*1.4, num=10000)
y = scistats.lognorm.pdf(x, *realparam)
# generate a matching random sample
sample = scistats.lognorm.rvs(*realparam, size=100000)
# plot the sample by histogram
h = plt.hist(sample, bins=100, density=True)
# fit the sample by using Log Normal distribution
param = scistats.lognorm.fit(sample)
print("Log-normal distribution parameters : ", param)
pdf_fitted = scistats.lognorm.pdf(x, *param)
plt.plot(x, pdf_fitted, lw=5, label="Fitted Lognormal distribution")
plt.legend()
plt.show()
Вывод:
Log-normal distribution parameters : (0.09916091013245995, -215.9562383088556, 22245.970148671593)