📜  Python - 高斯拟合(1)

📅  最后修改于: 2023-12-03 14:45:55.178000             🧑  作者: Mango

Python - 高斯拟合

在数据分析和机器学习领域,我们有时需要将给定的数据点拟合到某个连续概率分布中。高斯分布或正态分布是这样一个连续概率分布,其形状类似于钟形曲线。高斯分布具有许多优秀的性质,因此在许多科学领域都得到了广泛应用。

在本文中,我们将学习如何使用Python对高斯函数进行拟合。

高斯函数

高斯函数可以用下面的公式表示:

$$ f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{-(x-\mu)^2/2\sigma^2} $$

其中,$\mu$表示高斯分布的均值,$\sigma$表示标准差。这个函数的作用是将给定的x值映射为0到1之间的概率值。当x等于均值$\mu$时,高斯函数的值最大,为1。

我们可以使用SciPy库中的scipy.stats.norm来生成高斯函数的随机采样值。

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

mu = 0
sigma = 1

x = np.linspace(-5, 5, 1000)
y = norm.pdf(x, mu, sigma)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Probability density')
plt.show()

这段代码将生成一个高斯函数的图表,如下所示:

高斯函数

高斯拟合

高斯拟合是指将给定的数据点拟合到高斯函数中,并且找到最佳的均值和标准差。我们可以使用SciPy库中的curve_fit函数来实现高斯拟合。

from scipy.optimize import curve_fit

def gauss(x, *p):
    A, mu, sigma = p
    return A*np.exp(-(x-mu)**2/(2*sigma**2))

xdata = np.array([-1, 0, 1, 2, 3])
ydata = np.array([0.1, 0.5, 0.8, 0.4, 0.1])

p0 = [1, 0, 1]
popt, pcov = curve_fit(gauss, xdata, ydata, p0=p0)

print(popt)  # [ 0.55224019  0.45202099  0.77330298]

这段代码将拟合数据点到高斯函数,并输出最佳参数值。在这个例子中,我们使用变量xdataydata表示已知的数据点,变量p0表示初始参数值,popt表示最佳参数值,pcov表示协方差矩阵。

最终,我们可以将高斯函数的拟合结果和原始数据点绘制在同一张图表上。

plt.plot(xdata, ydata, 'o', label='data')
plt.plot(xdata, gauss(xdata, *popt), 'r-', label='fit')
plt.legend()
plt.show()

这段代码将生成一个包含数据点和高斯拟合结果的图表,如下所示:

高斯拟合

在实际应用中,我们可以使用高斯拟合来处理实验数据、信号处理、机器视觉等任务,例如在图像处理中对图像进行边缘检测或者在金融分析中对收益分布的建模等。

结论

本文介绍了使用Python对高斯函数进行拟合的方法。我们学习了如何使用SciPy和Matplotlib库来生成高斯分布图表以及如何使用SciPy库中的curve_fit函数来实现高斯拟合。高斯分布具有很好的性质,因此在许多科学领域都得到了广泛应用,高斯拟合也具有很强的实用性。