gmm聚类python_GMM与EM算法的Python实现

本文介绍了高斯混合模型(GMM)及其作为聚类模型的应用,特别是使用最大期望(EM)算法来估计GMM参数。通过Python代码展示了如何从头开始实现GMM,包括数据生成、模型初始化、E步骤、M步骤和迭代求解的过程,最终通过迭代优化使得估计的高斯分布接近真实数据分布。
摘要由CSDN通过智能技术生成

高斯混合模型(GMM)是一种常用的聚类模型,通常我们利用最大期望算法(EM)对高斯混合模型中的参数进行估计。

本教程中,我们自己动手一步步实现高斯混合模型。

高斯混合模型(Gaussian Mixture Model,GMM)是一种软聚类模型。 GMM也可以看作是K-means的推广,因为GMM不仅是考虑到了数据分布的均值,也考虑到了协方差。和K-means一样,我们需要提前确定簇的个数。

GMM的基本假设为数据是由几个不同的高斯分布的随机变量组合而成。如下图,我们就是用三个二维高斯分布生成的数据集。

2. 最大期望算法(Expectation–Maximization, EM)

有了隐变量还不够,我们还需要一个算法来找到最佳的W,从而得到GMM的模型参数。EM算法就是这样一个算法。

简单说来,EM算法分两个步骤。第一个步骤是E(期望),用来更新隐变量WW;

第二个步骤是M(最大化),用来更新GMM中各高斯分布的参量

然后重复进行以上两个步骤,直到达到迭代终止条件。

3. 具体步骤以及Python实现

完整代码在第4节。

首先,我们先引用一些我们需要用到的库和函数。

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.patches import Ellipse

from scipy.stats import multivariate_normal

plt.style.use('seaborn')

接下来,我们生成2000条二维模拟数据,其中400个样本来自N(μ1,var1)N(μ1,var1),600个来自N(μ2,var2)N(μ2,var2),1000个样本来自N(μ3,var3)N(μ3,var3)

# 第一簇的数据

num1, mu1, var1 = 400, [0.5, 0.5], [1, 3]

X1 = np.random.multivariate_normal(mu1, np.diag(var1), num1)

# 第二簇的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值