今天我要介绍一个强大的 Python 库,它是 HDBSCAN。
https://github.com/scikit-learn-contrib/hdbscan
HDBSCAN 是一种基于密度的高级聚类算法,用于识别数据中的自然群集。它在经典的 DBSCAN 算法的基础上引入了层次聚类的概念,并通过基于簇稳定性的技术来提取平面聚类。
主要特点:
- 基于密度的聚类: HDBSCAN 通过识别高密度区域作为聚类来工作,并将低密度区域视为噪声或边界点。这种方法对数据分布的形状不敏感,可以处理任何形状的聚类。
- 层次聚类: 不同于 DBSCAN 只在一个密度阈值上操作,HDBSCAN 构建了一个层次聚类树。
- 最小簇大小设置: HDBSCAN 允许用户设置最小簇大小。这意味着算法会忽略小于此阈值的聚类,从而避免产生大量微小的、不重要的簇。
- 可视化与解释性: HDBSCAN 支持多种可视化工具,如聚类树,有助于理解数据的聚类结构。
- 应用范围广泛: HDBSCAN 可以应用于各种类型的数据,包括高维数据和空间数据。
算法原理:
核心距离: 对于给定的最小聚类大小 minPts, 核心距离是点 p 到其第 minPts 近邻的距离,反映了点的局部密度。
相互可达距离: 两点 p 和 q 之间的互相可达距离是它们之间的实际距离和它们各自的核心距离中的最大值。
构建最小生成树: 使用相互可达距离,为数据点构建一个最小生成树。
转化为层次聚类: 将最小生成树转化为层次聚类树。
简化聚类树: 通过一个简化过程去除那些代表噪声或者边缘点的小分支。
提取稳定的聚类: 最后,选择那些在层次聚类树中相对稳定存在的聚类。
初体验:
库的安装: 使用 pip
或者 conda
安装:
<code>pip install hdbscan # 或者 conda install -c conda-forge hdbscan</code>
创建数据集: 使用 sklearn
生成一个数据集:
<code>import numpy as np import matplotlib.pyplot as plt import seaborn as sns import sklearn.datasets as data sns.set_context('poster') sns.set_style('white') sns.set_color_codes() plot_kwds = {'alpha' : 0.5, 's' : 80, 'linewidths':0} moons, _ = data.make_moons(n_samples=50, noise=0.05) blobs, _ = data.make_blobs(n_samples=50, centers=[(-0.75,2.25), (1.0, 2.0)], cluster_std=0.25) test_data = np.vstack([moons, blobs]) plt.scatter(test_data.T[0], test_data.T[1], color='b', **plot_kwds) plt.show()</code>
使用 HDBSCAN 进行聚类:
<code>import hdbscan clusterer = hdbscan.HDBSCAN(min_cluster_size=5, gen_min_span_tree=True) clusterer.fit(test_data) palette = sns.color_palette() cluster_colors = [sns.desaturate(palette[col], sat) if col >= 0 else (0.5, 0.5, 0.5) for col, sat in zip(clusterer.labels_, clusterer.probabilities_)] plt.scatter(test_data.T[0], test_data.T[1], c=cluster_colors, **plot_kwds) plt.show()</code>
以上就是关于 HDBSCAN 的简要介绍和初体验。
© 版权声明
THE END
暂无评论内容