python 拟合多峰直方图
时间: 2023-10-01 10:11:54 浏览: 204
直方图拟合
4星 · 用户满意度95%
要拟合多峰直方图,可以使用高斯混合模型 (Gaussian Mixture Model, GMM)。GMM 可以将多个高斯分布混合在一起,从而形成一个可以拟合多峰分布的模型。
以下是一个使用 sklearn 库中的 GMM 模型拟合多峰直方图的例子:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
# 生成多峰分布的样本数据
np.random.seed(0)
n_samples = 1000
x = np.concatenate([np.random.normal(loc=i, scale=0.5, size=int(n_samples/3)) for i in [-3, 0, 3]])
# 绘制原始直方图
plt.hist(x, bins=30, density=True, alpha=0.6, color='b')
# 使用 GMM 拟合多峰直方图
gmm = GaussianMixture(n_components=3)
gmm.fit(x.reshape(-1, 1))
# 生成拟合曲线
x_plot = np.linspace(-6, 6, 1000)
y_plot = np.exp(gmm.score_samples(x_plot.reshape(-1, 1)))
# 绘制拟合曲线
plt.plot(x_plot, y_plot, '-r', linewidth=2)
plt.show()
```
上述代码中,我们首先生成了一个多峰分布的样本数据,然后使用 GMM 模型拟合这个分布。最后,我们生成了拟合曲线,并将其绘制在原始直方图上。
执行上述代码后,会得到一个拟合了多峰直方图的图像。你可以尝试修改代码中的样本数据,以及 GMM 模型的参数,来观察不同的拟合效果。
阅读全文