高斯混合模型和KMeans算法可视化对比

文章目录

  • 高斯混合模型
    • 简介
    • 代码实现

高斯混合模型


简介

  • 高斯混合模型是用来聚类的,其采用期望最大算法(EM)进行迭代。其使用也是有条件的,适合数据是正态分布的数据。因为算法就是利用高斯概率分布函数进行极大似然估计的。
  • EM算法:一种迭代,分两步,
    • 根据初始值来对每个样本进行类别划分(例如代入高斯概率分布函数中,计算出概率,进行分类)
    • 根据划分好的类别,进行参数的计算,来更改初始的估计参数。然后再返回到第一步中重新进行分类。直到最后参数不再更新。

代码实现

# 导包
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
# 设置matplotlib中字体
plt.rcParams['font.family']='KaiTi'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size']=15
# 构造数据
X,y=datasets.make_blobs(n_samples=1500,
                    cluster_std=[0.3,1.1,2.2],
                       random_state=10)
# 可视化数据
plt.scatter(X[:,0],X[:,1],c=y)# 数据有两个特征,一个标签值

高斯混合模型和KMeans算法可视化对比_第1张图片

plt.figure(figsize=(12,4))
plt.figtext(x = 0.51,y = 1,s = 'KMeans VS GMM',ha = 'center',fontsize = 20)

plt.subplot(1,3,1)
plt.scatter(X[:,0],X[:,1],c=y)
plt.title('原始数据')

plt.subplot(1,3,2)
kmeans=KMeans(n_clusters=3)
y_=kmeans.fit_predict(X)
plt.scatter(X[:,0],X[:,1],c=y_)
plt.title('KMeans算法聚类')

plt.subplot(1,3,3)
gmm=GaussianMixture(n_components=3)
y_=gmm.fit_predict(X)
plt.scatter(X[:,0],X[:,1],c=y_)
plt.title('GMM算法聚类')

高斯混合模型和KMeans算法可视化对比_第2张图片
总结:高斯混合模型在聚类时,更考虑了数据的分布,因为其原理就是按照高斯分布概率函数和EM算法来的。KMeans算法聚合是按照距离来划分的,聚类形成实心的球行,不会考虑形状。这一点KMeans和DBSCAN对比也可以发现。有兴趣的可以给我留言,写一篇KMeans和DBSCAN的聚类可视化对比。

你可能感兴趣的:(机器学习,聚类)