gmm聚类python_GMM与EM算法的Python实现
时间: 2024-05-04 17:21:34 浏览: 214
基于python的高斯混合模型(GMM 聚类)的 EM 算法实现
5星 · 资源好评率100%
GMM(Gaussian Mixture Model)是一种基于高斯分布的概率模型,常用于聚类或密度估计。EM(Expectation-Maximization)算法是一种迭代算法,通常用于GMM的参数估计。下面是使用Python实现GMM和EM算法的示例代码:
```
import numpy as np
from sklearn.mixture import GaussianMixture
# 生成随机数据
np.random.seed(0)
X = np.concatenate([np.random.randn(100, 2) + [2, 2], np.random.randn(100, 2) + [-2, -2], np.random.randn(100, 2) + [2, -2]])
# 初始化GMM模型
gmm = GaussianMixture(n_components=3, covariance_type='full')
# 训练模型
gmm.fit(X)
# 打印聚类结果
print(gmm.predict(X))
# 打印GMM模型参数
print('Means:')
print(gmm.means_)
print('Covariances:')
print(gmm.covariances_)
print('Weights:')
print(gmm.weights_)
```
这段代码使用了`sklearn.mixture.GaussianMixture`类,它可以方便地进行GMM模型的训练和参数估计。其中,`n_components`参数指定了聚类个数,`covariance_type`参数指定了协方差矩阵类型。在上面的例子中,我们使用了`'full'`类型,即完整协方差矩阵。
下面是使用Python实现EM算法的示例代码:
```
import numpy as np
# 初始化参数
np.random.seed(0)
K = 3
N = 300
mu = np.array([[-2, 2], [2, 2], [0, -2]])
sigma = np.array([[[1, 0], [0, 1]], [[1, 0.5], [0.5, 1]], [[0.5, 0], [0, 0.5]]])
alpha = np.ones(K) / K
x = np.zeros((N, 2))
for i in range(K):
x[i * 100:(i + 1) * 100, :] = np.random.multivariate_normal(mu[i, :], sigma[i, :, :], 100)
# EM算法迭代
for t in range(10):
# E步:计算后验概率
gamma = np.zeros((N, K))
for k in range(K):
gamma[:, k] = alpha[k] * np.exp(-0.5 * np.sum((x - mu[k, :]) ** 2 / sigma[k, :, :], axis=1)) / np.sqrt(np.linalg.det(sigma[k, :, :]))
gamma /= np.sum(gamma, axis=1, keepdims=True)
# M步:更新模型参数
for k in range(K):
Nk = np.sum(gamma[:, k])
mu[k, :] = np.sum(gamma[:, k].reshape(-1, 1) * x, axis=0) / Nk
sigma[k, :, :] = np.sum(gamma[:, k].reshape(-1, 1, 1) * np.matmul((x - mu[k, :]).reshape(-1, 2, 1), (x - mu[k, :]).reshape(-1, 1, 2)), axis=0) / Nk
alpha[k] = Nk / N
# 打印模型参数
print('Iteration', t + 1)
print('Means:')
print(mu)
print('Covariances:')
print(sigma)
print('Weights:')
print(alpha)
```
这段代码使用了EM算法来估计GMM模型的参数。其中,`mu`、`sigma`和`alpha`分别表示高斯分布的均值、协方差矩阵和权重,`gamma`表示后验概率。在每一轮迭代中,首先计算后验概率,然后根据后验概率更新模型参数。迭代结束后,打印出模型参数。
阅读全文