快捷搜索: 王者荣耀 脱发

高斯混合模型和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)# 数据有两个特征,一个标签值
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算法聚类)

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

经验分享 程序员 微信小程序 职场和发展