python的混合高斯分布拟合曲线
时间: 2024-08-26 11:02:13 浏览: 74
在Python中,我们可以使用`scipy.stats`库中的`gaussian_mixture`函数来进行混合高斯分布(Mixture of Gaussian distributions)的拟合。高斯混合模型是一种概率建模技术,它假设数据集是由多个高斯分布(每个表示一个潜在的数据生成源)组成的。
以下是基本步骤:
1. 导入所需的库:
```python
from scipy.stats import gaussian_mixture
import numpy as np
import matplotlib.pyplot as plt
```
2. 准备数据,例如一组二维样本点,假设它们由两个正态分布组成:
```python
# 假设我们有一个二维数据集
data = np.random.multivariate_normal(mean1=[0, 0], cov1=[[1, 0], [0, 1]], size=500) + \
np.random.multivariate_normal(mean2=[5, 5], cov2=[[2, 1], [1, 2]], size=400)
```
3. 创建高斯混合模型并拟合数据:
```python
gmm = gaussian_mixture.GaussianMixture(n_components=2, covariance_type='full') # 选择两组高斯
gmm.fit(data)
```
4. 预测和可视化结果:
```python
predicted_labels = gmm.predict(data)
plt.scatter(data[:, 0], data[:, 1], c=predicted_labels)
for i, component in enumerate(gmm.weights_, start=1):
mean = gmm.means_[i-1]
covar = gmm.covariances_[i-1]
x, y = np.mgrid[-3:3:.01, -3:3:.01] # 定义网格
pos = np.empty(x.shape + (2,))
pos[:, :, 0] = x; pos[:, :, 1] = y
pdf = gmm.pdf(pos)
contour = plt.contour(x, y, pdf[:,:,i-1].T, levels=5, colors=f"C{i}")
plt.title("GMM Fit with Two Components")
plt.show()
```
阅读全文