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()
输出
如何使用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为我们提供了标准库,我们可以用它们来将数据拟合到高斯分布模型中。我们建议读者尝试在更多数据集上应用该分布,以对该主题更有信心。