Project Icon

hdbscan

灵活高效的层次密度聚类算法

HDBSCAN是一种高性能的层次密度聚类算法,能够处理不同密度的聚类并对参数选择更加稳健。该算法主要参数直观易选,无需复杂调优,适合探索性数据分析。HDBSCAN具有快速可靠的特点,能返回有意义的聚类结果。此外,它还支持异常检测和分支检测,并提供可视化工具辅助理解聚类结果。该开源项目在GitHub上提供详细文档和示例,支持Python 2和3版本。

.. image:: https://img.shields.io/pypi/v/hdbscan.svg :target: https://pypi.python.org/pypi/hdbscan/ :alt: PyPI 版本 .. image:: https://anaconda.org/conda-forge/hdbscan/badges/version.svg :target: https://anaconda.org/conda-forge/hdbscan :alt: Conda-forge 版本 .. image:: https://anaconda.org/conda-forge/hdbscan/badges/downloads.svg :target: https://anaconda.org/conda-forge/hdbscan :alt: Conda-forge 下载量 .. image:: https://img.shields.io/pypi/l/hdbscan.svg :target: https://github.com/scikit-learn-contrib/hdbscan/blob/master/LICENSE :alt: 许可证 .. image:: https://travis-ci.org/scikit-learn-contrib/hdbscan.svg :target: https://travis-ci.org/scikit-learn-contrib/hdbscan :alt: Travis 构建状态 .. image:: https://codecov.io/gh/scikit-learn-contrib/hdbscan/branch/master/graph/badge.svg :target: https://codecov.io/gh/scikit-learn-contrib/hdbscan :alt: 测试覆盖率 .. image:: https://readthedocs.org/projects/hdbscan/badge/?version=latest :target: https://hdbscan.readthedocs.org :alt: 文档 .. image:: http://joss.theoj.org/papers/10.21105/joss.00205/status.svg :target: http://joss.theoj.org/papers/10.21105/joss.00205 :alt: JOSS 文章 .. image:: https://mybinder.org/badge.svg :target: https://mybinder.org/v2/gh/scikit-learn-contrib/hdbscan :alt: 在 Binder 中启动示例笔记本

======= HDBSCAN

HDBSCAN - 基于分层密度的带噪声应用空间聚类。它在不同的 epsilon 值上执行 DBSCAN,并整合结果以找到在 epsilon 上提供最佳稳定性的聚类。这使得 HDBSCAN 能够找到不同密度的聚类(不同于 DBSCAN),并且对参数选择更加稳健。

实际上,这意味着 HDBSCAN 无需或仅需很少的参数调整就能直接返回良好的聚类结果 —— 而且主要参数"最小聚类大小"是直观且易于选择的。

HDBSCAN 非常适合探索性数据分析;它是一种快速且稳健的算法,你可以信赖它返回有意义的聚类(如果存在的话)。

基于以下论文:

McInnes L, Healy J. *加速分层密度聚类* 
发表于:2017 IEEE 国际数据挖掘研讨会论文集 (ICDMW),IEEE,第 33-42 页。
2017 `[pdf] <http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8215642>`_

R. Campello, D. Moulavi, 和 J. Sander, *基于分层密度估计的密度聚类*
发表于:知识发现与数据挖掘进展,Springer,第 160-172 页。
2013

文档(包括教程)可在 ReadTheDocs 上查阅:http://hdbscan.readthedocs.io/en/latest/

以下笔记本可供参考:比较 HDBSCAN 与其他聚类算法 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/Comparing%20Clustering%20Algorithms.ipynb>HDBSCAN 工作原理解析 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/How%20HDBSCAN%20Works.ipynb> 以及 与其他 Python 聚类实现的性能比较 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/Benchmarking%20scalability%20of%20clustering%20implementations-v0.7.ipynb>_。


如何使用 HDBSCAN

hdbscan 包继承自 sklearn 类,因此可以与其他 sklearn 聚类器无缝对接,调用 API 完全相同。同样,它支持多种输入格式:形状为 (样本数 x 特征数) 的数组(或 pandas 数据框、稀疏矩阵);给出样本间距离矩阵的数组(或稀疏矩阵)。

.. code:: python

import hdbscan
from sklearn.datasets import make_blobs

data, _ = make_blobs(1000)

clusterer = hdbscan.HDBSCAN(min_cluster_size=10)
cluster_labels = clusterer.fit_predict(data)

性能

我们为提高 hdbscan 实现的速度做出了巨大努力。它比 Java 中的参考实现 快几个数量级 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/Python%20vs%20Java.ipynb>,目前甚至比 C 和 C++ 中高度优化的单链接实现还要快。 版本 0.7 的性能可以在这个笔记本中查看 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/Benchmarking%20scalability%20of%20clustering%20implementations-v0.7.ipynb>。 特别是,在低维数据上的性能优于 sklearn 的 DBSCAN <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/Benchmarking%20scalability%20of%20clustering%20implementations%202D%20v0.7.ipynb>_, 而且通过支持 joblib 缓存,使用不同参数重新聚类几乎可以零成本完成。


附加功能

hdbscan 包配备了可视化工具,帮助你理解聚类结果。拟合数据后,聚类器对象具有以下属性:

  • 压缩的聚类层次结构
  • 稳健单链接聚类层次结构
  • 可达距离最小生成树

所有这些都配备了绘图方法,并可转换为 Pandas 或 NetworkX 以进行进一步分析。有关示例和更多详细信息,请参阅 HDBSCAN 工作原理 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/How%20HDBSCAN%20Works.ipynb>_ 笔记本。

聚类器对象还有一个属性提供聚类成员强度,从而实现可选的软聚类(无需额外计算成本)。最后,每个聚类还会得到一个持续性得分,表示该聚类在数据中存在的距离尺度范围内的稳定性。这提供了聚类相对强度的度量。


异常检测

HDBSCAN 聚类器对象还支持 GLOSH 异常检测算法。 将聚类器拟合到数据后,可以通过 outlier_scores_ 属性访问异常分数。结果是一个分数值向量,每个拟合的数据点对应一个分数。较高的分数表示更异常的对象。 通过上四分位数选择异常通常是一种好方法。

基于以下论文: R.J.G.B. Campello, D. Moulavi, A. Zimek 和 J. Sander 用于数据聚类、可视化和异常检测的分层密度估计, ACM 数据发现知识交易,第 10 卷,第 1 期(2015 年 7 月),1-51 页。


稳健单链接

hdbscan 包还提供了对 Chaudhuri 和 Dasgupta 提出的稳健单链接聚类算法的支持。与 HDBSCAN 实现一样,这是该算法的高性能版本,性能优于 scipy 的标准单链接实现。稳健单链接 层次结构可作为稳健单链接聚类器的属性使用,同样可以绘制或导出层次结构,并在给定 截断级别和 gamma 值下提取平面聚类。

使用示例:

.. code:: python

import hdbscan
from sklearn.datasets import make_blobs

data, _ = make_blobs(1000)

clusterer = hdbscan.RobustSingleLinkage(cut=0.125, k=7)
cluster_labels = clusterer.fit_predict(data)
hierarchy = clusterer.cluster_hierarchy_
alt_labels = hierarchy.get_clusters(0.100, 5)
hierarchy.plot()

基于以下论文: K. Chaudhuri 和 S. Dasgupta. "聚类树的收敛率。" 发表于:神经信息处理系统进展,2010。


分支检测

hdbscan 包支持 Bot 等人 <https://arxiv.org/abs/2311.15887>_ 提出的分支检测后处理步骤。聚类形状, 如分支结构,可以揭示在基于密度的聚类层次结构中未表达的有趣模式。 BranchDetector 类模仿 HDBSCAN API,可用于检测聚类中的分支层次结构。它提供压缩 分支层次结构、分支持续性和分支成员资格,并支持 joblib 的缓存功能。有一个笔记本 演示 BranchDetector 的使用 <http://nbviewer.jupyter.org/github/scikit-learn-contrib/hdbscan/blob/master/notebooks/How%20to%20detect%20branches.ipynb>_。

使用示例:

.. code:: python

import hdbscan
from sklearn.datasets import make_blobs

data, _ = make_blobs(1000)

clusterer = hdbscan.HDBSCAN(branch_detection_data=True).fit(data)
branch_detector = hdbscan.BranchDetector().fit(clusterer)
branch_detector.cluster_approximation_graph_.plot(edge_width=0.1)

基于以下论文: D. M. Bot, J. Peeters, J. Liesenborgs 和 J. Aerts "FLASC:一种对突发敏感的聚类算法:扩展 HDBSCAN 以检测聚类中的分支"* Arxiv 2311.15887, 2023。


安装

最简单的安装方法,如果你使用 Anaconda(感谢 conda-forge,它太棒了!):

.. code:: bash

conda install -c conda-forge hdbscan

使用 PyPI 安装,假设你的 pip 是最新版本:

.. code:: bash

pip install hdbscan

多个平台的二进制轮子可用,这要感谢 Ryan Helinski rlhelinski@gmail.com 的工作。

如果 pip 在拉取依赖项时遇到困难,我们建议先将 pip 升级到至少 10 版本,然后再试一次:

.. code:: bash

pip install --upgrade pip
pip install hdbscan

否则,使用 anaconda 手动安装依赖项,然后从 pip 拉取 hdbscan:

.. code:: bash

conda install cython
conda install numpy scipy
conda install scikit-learn
pip install hdbscan

要手动安装 GitHub 上的最新代码:

.. code:: bash

pip install --upgrade git+https://github.com/scikit-learn-contrib/hdbscan.git#egg=hdbscan

或者下载软件包,安装所需依赖,并手动运行安装程序:

.. code:: bash

wget https://github.com/scikit-learn-contrib/hdbscan/archive/master.zip
unzip master.zip
rm master.zip
cd hdbscan-master

pip install -r requirements.txt

python setup.py install

运行测试

安装后可以使用以下命令运行软件包测试:

.. code:: bash

nosetests -s hdbscan

或者,如果已安装 nosenosetests 不在您的 PATH 变量中:

.. code:: bash

python -m nose -s hdbscan

如果有一个或多个测试失败,请在 https://github.com/scikit-learn-contrib/hdbscan/issues/new 报告错误


Python 版本

hdbscan 库同时支持 Python 2 和 Python 3。但如果您可以使用,我们推荐 Python 3 作为更好的选择。


帮助和支持

对于简单问题,您可以查阅文档中的 FAQ <https://hdbscan.readthedocs.io/en/latest/faq.html>。 如果您的问题在那里没有得到适当解决,请查看 GitHub 上的 问题 <https://github.com/scikit-learn-contrib/hdbscan/issues>。最后,如果那里没有可用的解决方案,请随时 提出问题 <https://github.com/scikit-learn-contrib/hdbscan/issues/new>_;作者将尝试在合理的时间内回复。


贡献

我们欢迎任何形式的贡献!对文档的协助,特别是扩展教程,总是受欢迎的。要贡献,请 fork 项目 <https://github.com/scikit-learn-contrib/hdbscan/issues#fork-destination-box>_,进行更改并提交拉取请求。我们将尽最大努力解决任何问题,并将您的代码合并到主分支中。


引用

如果您在科学出版物中使用了这个代码库并希望引用它,请使用 开源软件期刊文章 <http://joss.theoj.org/papers/10.21105/joss.00205>_。

L. McInnes, J. Healy, S. Astels, *hdbscan: Hierarchical density based clustering*
In: Journal of Open Source Software, The Open Journal, volume 2, number 11.
2017

.. code:: bibtex

@article{mcinnes2017hdbscan,
  title={hdbscan: Hierarchical density based clustering},
  author={McInnes, Leland and Healy, John and Astels, Steve},
  journal={The Journal of Open Source Software},
  volume={2},
  number={11},
  pages={205},
  year={2017}
}

要引用这个库中开发的高性能算法,请引用我们在 ICDMW 2017 会议论文集中的论文。

McInnes L, Healy J. *Accelerated Hierarchical Density Based Clustering* 
In: 2017 IEEE International Conference on Data Mining Workshops (ICDMW), IEEE, pp 33-42.
2017

.. code:: bibtex

@inproceedings{mcinnes2017accelerated,
  title={Accelerated Hierarchical Density Based Clustering},
  author={McInnes, Leland and Healy, John},
  booktitle={Data Mining Workshops (ICDMW), 2017 IEEE International Conference on},
  pages={33--42},
  year={2017},
  organization={IEEE}
}

如果您在科学出版物中使用了这个代码库的分支检测功能并希望引用它,请使用 Arxiv 预印本 <https://arxiv.org/abs/2311.15887>_:

D. M. Bot, J. Peeters, J. Liesenborgs and J. Aerts
*"FLASC: A Flare-Sensitive Clustering Algorithm: Extending HDBSCAN\* for Detecting Branches in Clusters"*
Arxiv 2311.15887, 2023.

.. code:: bibtex

@misc{bot2023flasc,
    title={FLASC: A Flare-Sensitive Clustering Algorithm: Extending HDBSCAN* for Detecting Branches in Clusters}, 
    author={D. M. Bot and J. Peeters and J. Liesenborgs and J. Aerts},
    year={2023},
    eprint={2311.15887},
    archivePrefix={arXiv},
    primaryClass={cs.LG},
    url={https://arxiv.org/abs/2311.15887}, 
}

许可

hdbscan 包采用 3 条款 BSD 许可。尽情使用吧。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号