Gaussian Mixture Models高斯混合模型和聚类验证
Created: Apr 24, 2020 4:56 PM
什么是高斯混合模型
高斯混合模型假定每个类都遵循特定的统计分布。
一维高斯分布
高斯混合模型
二维高斯分布
EM 期望最大化算法
STEP #1 : 初始化K个高斯分布STEP #2 :将数据软聚类成我们初始化的两个高斯分布,这一步称为期望步骤或E步骤STEP #3 :基于软聚类重新估计高斯,这一步称为最大化步骤,M步骤STEP #4 :评估对数似然来检查收敛,如果收敛,那么返回结果。如果不收敛返回第二步重复执行,直到收敛
STEP #1 : 初始化K个高斯分布
初始化高斯分布,我们需要给均值和方差赋值,朴素的赋值方法是将他们设置成数据集的平均值,还有一种更好的方法是在数据集熵使用K均值,我们可以使用随机值
STEP #2 :将数据软聚类成我们初始化的两个高斯分布,这一步称为期望步骤或E步骤
我们可以将所有数据点带入公式中,计算出属于每个类的概率值。
STEP #3 :基于软聚类重新估计高斯,这一步称为最大化步骤,M步骤
将第二步计算得到的结果,来生成新的高斯分布的参数u
计算方差
STEP #4 :评估对数似然来检查收敛,如果收敛,那么返回结果。如果不收敛返回第二步重复执行,直到收敛
对数似然越高,我们越能确定生成的回合模型可以负责创建数据,或者说适合我们的数据集,所以我们需要最大化这个值。
优缺点
优点:
- - 提供软聚类,比如在进行文档分类,并且希望每个文档都是多个主题,GMM很有用
- - 外观很有灵活性,一个聚类可以包含另外一个
缺点:
- - GMM聚类对初始化值很敏感
- - 可能收敛到局部最优
- - 收敛速度比较慢
高斯混合模型在传感器上的应用
聚类分析过程
聚类评价
- - 外部指标, 处理有标签数据时使用的评分
- - 内部指标,没有标签,
- - 相对指标,这些指标表明两个聚类结构中哪一个在某种意义上更好。
紧凑性
一个聚类中元素彼此之间的距离
可分性
不同聚类之间的距离
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import cluster, datasets, mixturen_samples = 1000varied = datasets.make_blobs(n_samples=n_samples,cluster_std=[5, 1, 0.5],random_state=3)X, y = varied[0], varied[1]plt.figure( figsize=(16,12))plt.scatter(X[:,0], X[:,1], c=y, edgecolor='black', lw=1.5, s=100, cmap=plt.get_cmap('viridis'))plt.show()
from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3)pred = kmeans.fit_predict(X)plt.figure( figsize=(16,12))plt.scatter(X[:,0], X[:,1], c=pred, edgecolor='black', lw=1.5, s=100, cmap=plt.get_cmap('viridis'))plt.show()
# TODO: Import GaussianMixturefrom sklearn.mixture import GaussianMixture# TODO: Create an instance of Gaussian Mixture with 3 componentsgmm = GaussianMixture(n_components=3).fit(X)# TODO: fit the datasetgmm = gmm.fit(X)# TODO: predict the clustering labels for the datasetpred_gmm = gmm.predict(X)# Plot the clustersplt.figure( figsize=(16,12))plt.scatter(X[:,0], X[:,1], c=pred_gmm, edgecolor='black', lw=1.5, s=100, cmap=plt.get_cmap('viridis'))plt.show()