高斯混合模型和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的聚类可视化对比。
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
Idea创建一个maven web项目