gpt4 book ai didi

python - 如何估计累积高斯拟合的正确参数?

转载 作者:行者123 更新时间:2023-11-28 22:37:37 25 4
gpt4 key购买 nike

我正在尝试将累积高斯分布拟合到我的数据中,但拟合显然是错误的。为什么我得到错误的均值和标准差?您可以在下面找到我的代码和输出。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

testrefratios=np.array([ 0.2, 0.4, 0.6, 0.8, 0.9, 1. , 1.1, 1.2, 1.4, 1.6, 1.8])
Pn_final=np.array([ 0. , 0. , 0.03 , 0.35 , 0.47, 0.57 , 0.68, 0.73, 0.76 , 0.85 , 0.91])
Pd_final=np.array([ 0. , 0.03, 0.36 , 0.85 , 0.97, 0.98 , 0.98 , 0.99 , 1., 1., 1. ])

# cumulative gaussian fit
fg = plt.figure(1); fg.clf()
ax = fg.add_subplot(1, 1, 1)
t = np.linspace(0,2, 1000)

ax.grid(True)
ax.set_ylabel("Cumulative Probability Density")
ax.set_title("Fit to Normal Distribution")

mu1,sigma1 = norm.fit(Pn_final) # classical fit
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5)

mu1,sigma1 = norm.fit(Pd_final) # classical fit
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5)

ax.plot(testrefratios, Pn_final, 'bo',label='numerosity comparison')
ax.plot(testrefratios, Pd_final, 'ro', label='density comparison')

plt.legend(loc='lower right')


fg.canvas.draw()

输出:

Fit results with code shown

最佳答案

目前,您所做的只是告诉系统您正在尝试拟合累积 高斯分布。 norm.fit(Pn_final) 在假设 Pn_final 代表 Gaussian 的情况下尽力而为。

一种方法是使用scipy.optimize.curve_fit,并添加

from scipy.optimize import curve_fit

mu1,sigma1 = curve_fit(norm.cdf, testrefratios, Pn_final, p0=[0,1])[0]
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5)

mu1,sigma1 = curve_fit(norm.cdf, testrefratios, Pd_final, p0=[0,1])[0]
ax.plot(t, norm.cdf(t, mu1, sigma1), alpha=.5)

给我

example fit

至少看起来更可信。

关于python - 如何估计累积高斯拟合的正确参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com