Python 进行高斯拟合

Python 进行高斯拟合

数据分析与可视化在当今至关重要,数据被认为是新的石油。通常,数据分析包括将数据输入数学模型并提取有用信息。高斯拟合是数据科学家使用的一种强大的数学模型,用于基于钟形曲线模拟数据。在本文中,我们将了解高斯拟合以及如何使用Python编码。

什么是高斯拟合

高斯分布以钟形曲线来描述。钟形曲线围绕均值(μ)对称。我们定义概率密度函数如下:

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

在这里,σ代表分布的标准差,μ是均值,π是常数,其值约为3.14。

我们必须估计μ和σ的值,以适应任何数据到高斯分布中。手动完成这个任务或创建逻辑代码会很繁琐和不方便。因此,Python为我们提供了一些内置的库和函数来处理这个问题。

钟形曲线

钟形曲线是通过高斯分布得到的图形。在继续之前,读者需要了解钟形曲线的典型形状。这将使读者在将来处理高斯分布时有更好的直觉。

示例代码

在下面的代码中,我们使用Numpy的arrange函数生成了一个均匀的数据点。我们使用norm.pdf函数计算了高斯分布的概率分布函数。我们将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()

输出

Python 进行高斯拟合

如何使用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中执行高斯拟合。这是处理钟形分布曲线的有价值的技术。幸运的是,Python为我们提供了标准库,我们可以用它们来将数据拟合到高斯分布模型中。我们建议读者尝试在更多数据集上应用该分布,以对该主题更有信心。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程