使用Python进行高斯拟合


数据分析和可视化在当今时代至关重要,数据就是新的石油。数据分析通常涉及将数据输入数学模型并提取有用的信息。高斯拟合是一个强大的数学模型,数据科学家使用它根据钟形曲线对数据进行建模。在本文中,我们将了解高斯拟合以及如何使用Python对其进行编码。

什么是高斯拟合

钟形曲线是高斯分布的特征。钟形曲线围绕均值(μ)对称。我们定义概率密度函数如下:

f(x) = (1 / (σ * sqrt(2π))) * exp(-(x - μ)² / (2 * σ²))

这里σ表示分布的标准差,μ是均值,π(圆周率)是一个常数,其值约为3.14。

我们必须估计μ和σ的值才能将任何数据拟合到高斯分布中。手动执行此任务或创建逻辑代码将非常繁琐且不方便。因此,Python为我们提供了一些内置库和函数来处理它。

钟形曲线

钟形曲线是通过高斯分布获得的图。在进一步讨论之前,读者需要了解钟形曲线的典型形状。这将在读者将来处理高斯分布时提供更好的直觉。

示例代码

在下面的代码中,我们使用Numpy的arrange函数生成了均匀的数据点。我们使用norm.pdf函数计算高斯分布的概率分布函数。我们将均值设置为25,标准差也设置为25。我们使用matplotlib库绘制了概率分布函数。从图表中可以看出一个重要的观察结果是,围绕0的值比-100和100等极值更常见。

import numpy as np
import scipy as sp
from scipy import stats
import matplotlib.pyplot as plt
x_data = np.arange(-100, 100, 0.01)
y_data = stats.norm.pdf(x_data, 25, 20)
plt.plot(x_data, y_data)
plt.title("bell curve")
plt.xlabel("value of x")
plt.ylabel("value of y")
plt.show()

输出

如何使用curve_fit方法

正如我们前面部分所讨论的,高斯分布拟合的主要思想是找到μ和σ的最优值。因此,我们可以执行以下算法来实现相同的结果。

  • 首先,定义高斯函数。这可以由我们自己编写如下:

def gaussian(x, μ, σ):
return (1 / (σ * np.sqrt(2 * np.pi))) * np.exp(-((x - μ) ** 2) / (2 * σ
** 2))
  • 在SciPy包的帮助下,使用curve_fit方法执行高斯拟合。该方法返回μ和σ的最优参数。

  • 接下来,通过生成y值并使用任何标准数据可视化库(如Matplotlib)生成图。

示例

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def gaussian(x, μ, σ):
   return (1 / (σ * np.sqrt(2 * np.pi))) * np.exp(-((x - μ) ** 2) / (2 * σ** 2))
x_data = np.linspace(-5, 5, 100)
y_data = gaussian(x_data, 0, 1) + np.random.normal(0, 0.2, 100)
popt, pcov = curve_fit(gaussian, x_data, y_data)
μ_fit, σ_fit = popt
y_fit = gaussian(x_data, μ_fit, σ_fit)
plt.scatter(x_data, y_data, label='Data')
plt.plot(x_data, y_fit, 'r', label='Fit')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

输出

注意 - 生成的输出每次都会有所不同,因为我们生成的是随机数。

结论

在本文中,我们了解了如何在Python中执行高斯拟合。这是一种处理钟形分布曲线的宝贵技术。幸运的是,Python为我们提供了标准库,我们可以使用这些库将数据拟合到高斯分布模型。我们建议读者尝试在更多数据集上使用该分布,以便对该主题有更多信心。

更新于:2023年7月28日

5K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告