【Python机器学习】K-Means、DBSCAN、GMM三种聚类的对比演示(附源码)

简介: 【Python机器学习】K-Means、DBSCAN、GMM三种聚类的对比演示(附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

下面给出一个从多方面综合分析划分聚类,密度聚类和模型聚类。以及聚类算法内部评价指标的示例,该示例先生成三种二维平面上的实验数据和一种高维空间中的实验数据,然后分别用kmeans,DBSCAN,GaussianMixture三种算法对它们进行聚类,并计算SC DBI CH ZQ四个指标,展示实验样本点的分布与聚类算法实用性,评价指标值有效性的关系。

三种二维平面上的实验样本图如下,它们分别是圆环,高斯分布和月牙形状的,由datasets模块中响应的函数产生

高维空间中的实验样本通过PCA降维后,在二维平面上的分布如下所示,它是由datasets模块中的make_gaussian_quantiles()函数在四维空间中以原点为中心,按高斯分布随机产生的,由内向外分为9层的类球状分布,随后去掉1-6层和第8层,只保留内核的第0层和外面的第7层,可以将此数据想象成一个带核的空心四维类球体

三种聚类算法的结果以及指标值对比如下图所示

DBSCAN算法对非凸簇有较好的聚类效果,GaussianMixture算法对高斯分布的簇有较好的聚类效果,四维类球体样本集也是按高斯分布产生的,因此它可以很好地学习到模型参数,高斯分布的样本集在实际工程中比较常见

预先探索样本集在空间中的分布对于选择合适的聚类算法也很重要,除了通过降维来直观的观察样本集在空间中的分布外,聚类内部评价指标也可以帮助分析,比如在面对大数据量的聚类任务时,可以先随机抽取或者划分网格抽取小部分样本进行试分簇,如果发现运行DBSCAN算法后的ZQ指标改善较多,而其他指标变差,则样本集可能是非凸的分布

部分代码如下

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans, DBSCAN
from sklearn.mixture import GaussianMixture
from sklearn import metrics
from zqscore import ZQ_score
X1, y1 = make_blobs(n_samples=300, n_features=2, centers=[[0,0]], cluster_std=[1.2])
X2, y2 = make_blobs(n_samples=600, n_features=2, centers=[[3,3]], cluster_std=[1.8])
plt.scatter(X1[:, 0], X1[:, 1], marker='o', color='r')
plt.scatter(X2[:, 0], X2[:, 1], marker='+', color='b')
plt.show()
y_pred = gm.predict(X)
C1 = []
C2 = []
for i in range(len(X)):
    if y_pred[i] == 1:
        C1.append(list(X[i]))
    else:
        C2.append(list(X[i]))
C1 = np.array(C1)
C2 = np.array(C2)
plt.scatter(C1[:, 0], C1[:, 1], marker='o', color='r')
plt.scatter(C2[:, 0], C2[:, 1], marker='+', color='b')
plt.show()
samples = np.loadtxt("kmeansSamples.txt")
gm = GaussianMixture(n_components=2, random_state=0).fit(samples)
labels = gm.predict(samples)
plt.scatter(samples[:,0],samples[:,1],c=labels+1.5,linewidths=np.power(labels+1.5, 2))
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
3月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
69 0
|
3月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
102 0
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
192 6
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
260 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
52 14
|
2月前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
90 2
|
3月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
77 1
|
3月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络

热门文章

最新文章