【Python机器学习】密度聚类DBSCAN、OPTICS的讲解及实战演示(附源码 超详细)

简介: 【Python机器学习】密度聚类DBSCAN、OPTICS的讲解及实战演示(附源码 超详细)

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

划分聚类、密度聚类和模型聚类是比较有代表性的三种聚类思路

1:划分聚类

划分(Partitioning)聚类是基于距离的,它的基本思想是使簇内的点距离尽量近、簇间的点距离尽量远。k-means算法就属于划分聚类。划分聚类适合凸样本点集合的分簇。

2:密度聚类

密度(Density)聚类是基于所谓的密度进行分簇

密度聚类的思想是当邻域的密度达到指定阈值时,就将邻域内的样本点合并到本簇内,如果本簇内所有样本点的邻域密度都达不到指定阈值,则本簇划分完毕,进行下一个簇的划分。

DBSCAN

DBSCAN算法将所有样本点分为核心点、边界点和噪声点,如灰色点、白色点和黑色点所示

核心点:在指定大小的邻域内有不少于指定数量的点。指定大小的邻域,一般用邻域半径eps来确定。指定数量用min_samples来表示。

边界点:处于核心点的邻域内的非核心点。

噪声点:邻域内没有核心点的点

DBSCAN算法需要预先指定eps和min_samples两个参数,即它们是超参数。

算法寻找一个簇的过程是先对样本点按顺序排查,如果能找到一个核心点,就从该核心点出发找出所有直接和间接与之相邻的核心点,以及这些核心点的所有边界点,这些核心点和边界点就形成一个簇

接着,从剩下的点中再找另一个簇,直到没有核心点为止。余下的点为噪声点。

效果展示如下 对数据集中三十个坐标应用DBSCAN算法

下面三幅图是eps和min_samples取不同值时候的分布情况

代码如下

from sklearn.cluster import DBSCAN
import numpy as np
samples = np.loadtxt("kmeansSamples.txt")
clustering = DBSCAN(eps=5, min_samples=5).fit(samples)
clustering.labels_
>>>array([ 0,  0,  0,  0, -1,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0, -1,        1,  1,  0,  0,  1,  0,  0,  0,  0,  0,  1, -1,  0], dtype=int64)
import matplotlib.pyplot as plt
plt.scatter(samples[:,0],samples[:,1],c=clustering.labels_+1.5,linewidths=np.power(clustering.labels_+1.5, 2))
plt.show()

DBSCAN算法善于发现任意形状的稠密分布数据集,但它的结果对邻域参数eps和min_samples敏感。不像k-means算法只需要调整一个参数,DBSCAN算法需要对两个参数进行联合调参,复杂度要高的多。

如果能确定聚类的具体评价指标,如簇数、噪声点数限制和SC、DBI、CH和ZQ等,则可以对参数eps和min_samples的合理取值依次运行DBSCAN算法,取最好的评价结果。如果数据量特别大,则可以将参数空间划分为若干网格,每个网格取一个代表值进行聚类。

OPTICS

OPTICS算法的基本思想是在DBSCAN算法的基础上,将每个点离最近的核心点密集区的可达距离都计算出来,然后根据预先指定的距离阈值把每个点分到与密集区对应的簇中,可达距离超过阈值的点是噪声点。点到核心点密集区的可达距离是它到该区内所有核心点的距离的最小值。

引入可达距离可以直观的看到样本点的聚集情况,OPTICS算法巧妙地解决了确定eps参数值的问题

输出结果如下

代码如下

from sklearn.cluster import OPTICS, cluster_optics_dbscan
import matplotlib.pyplot as plt
import numpy as np
samples = np.loadtxt("kmeansSamples.txt")
clust = OPTICS(max_eps=np.inf,min_samples=5, cluster_method='dbscan',eps=4.5)
clust.fit(samples)
clust.ordering_
reachability = clust.reachability_[clust.ordering_]
reachability
labels = clust.labels_[clust.ordering_]
labels
plt.plot(list(range(1, 31)),reachability,marker='.',markeredgewidth=3,linestyle='-')
plt.show()
plt.scatter(samples[:,0],samples[:,1],c=clust.labels_+1.5,linewidths=np.power(clust.labels_+1.5, 2))
plt.show()

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

相关文章
|
2天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
8 1
|
2天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
9 1
|
3天前
|
开发者 Python
探索Python中的装饰器:从入门到实战
【10月更文挑战第30天】本文将深入浅出地介绍Python中一个强大而有趣的特性——装饰器。我们将通过实际代码示例,一步步揭示装饰器如何简化代码、增强函数功能并保持代码的可读性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效编程的大门。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
【Python机器学习】文本特征提取及文本向量化讲解和实战(图文解释 附源码)
388 0
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
【Python机器学习】K-Means对文本聚类和半环形数据聚类实战(附源码和数据集)
176 0
|
1月前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
49 5
|
1月前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
70 3
|
1月前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
35 1
|
2月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
46 1
|
3月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【8月更文挑战第3天】在数据的海洋中探寻真知,决策树犹如智慧之树,以其直观易懂的强大功能,引领我们逐步缩小决策范围,轻松获取数据洞察。本篇将带您踏上Python机器学习之旅,从理解决策树为何受青睐开始,通过scikit-learn库实现鸢尾花数据集分类,解析其决策机制,并掌握调参技巧,最终优化模型性能,共同摘取数据科学的甜美果实。
50 1