空间聚类算法是数据挖掘和机器学习领域中的一种重要技术。
本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期。
随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注。
其中,DBSCAN
(Density-Based Spatial Clustering of Applications with Noise)是最具代表性的算法之一。
基于密度的空间聚类算法在许多领域都有应用,例如图像处理、生物信息学、社交网络分析等。
在图像处理中,该算法可以用于检测图像中的密集区域,用于识别物体或形状。
DBSCAN
算法的基本思想是,对于给定的数据集,基于数据点的密度进行聚类。
在密度高的区域,数据点更为集中,而密度低的区域数据点较为稀疏。
基于密度的算法能够发现任意形状的簇,并且对噪声有较好的鲁棒性。
算法的核心在于:
下面,创建三种不同的样本数据,来测试DBSCAN
的聚类效果。
from sklearn.datasets import make_blobs, make_moons, make_circles fig, axes = plt.subplots(nrows=1, ncols=3) fig.set_size_inches((9, 3)) X_moon, y_moon = make_moons(noise=0.05, n_samples=1000) axes[0].scatter( X_moon[:, 0], X_moon[:, 1], marker="o", c=y_moon, s=25, cmap=plt.cm.spring, ) X_circle, y_circle = make_circles(noise=0.05, factor=0.5, n_samples=1000) axes[1].scatter( X_circle[:, 0], X_circle[:, 1], marker="o", c=y_circle, s=25, cmap=plt.cm.winter, ) X_blob, y_blob = make_blobs(n_samples=1000, centers=3) axes[2].scatter( X_blob[:, 0], X_blob[:, 1], marker="o", c=y_blob, s=25, cmap=plt.cm.autumn, ) plt.show()
用scikit-learn
的DBSCAN
模型来训练,这个模型主要的参数有两个:
eps
的点。通过调节这2个参数,基于上面创建的样本数据,训练效果如下:
from sklearn.cluster import DBSCAN # 定义 regs = [ DBSCAN(min_samples=2, eps=0.1), DBSCAN(min_samples=2, eps=0.2), DBSCAN(min_samples=3, eps=2), ] # 训练模型 regs[0].fit(X_moon, y_moon) regs[1].fit(X_circle, y_circle) regs[2].fit(X_blob, y_blob) fig, axes = plt.subplots(nrows=1, ncols=3) fig.set_size_inches((9, 3)) # 绘制聚类之后的结果 axes[0].scatter( X_moon[:, 0], X_moon[:, 1], marker="o", c=regs[0].labels_, s=25, cmap=plt.cm.spring, ) axes[1].scatter( X_circle[:, 0], X_circle[:, 1], marker="o", c=regs[1].labels_, s=25, cmap=plt.cm.winter, ) axes[2].scatter( X_blob[:, 0], X_blob[:, 1], marker="o", c=regs[2].labels_, s=25, cmap=plt.cm.autumn, ) plt.show()
针对3种不同的样本数据,调节参数之后,聚类的效果还不错。
感兴趣的话,可以试试修改上面代码中的DBSCAN
定义部分的参数:
# 定义 regs = [ DBSCAN(min_samples=2, eps=0.1), DBSCAN(min_samples=2, eps=0.2), DBSCAN(min_samples=3, eps=2), ]
调节不同的 min_sample
和eps
,看看不同的聚类效果。
总的来说,基于密度的空间聚类算法是一种强大的工具,能够从数据中提取有价值的信息。
但是,如同所有的算法一样,它也有其局限性,需要在合适的应用场景中使用,才能达到最佳的效果。
它的优势主要在于:
不足之处则在于: