大家好,我是木木。今天给大家分享一个超酷的Python库,HDBSCAN。
这个库是基于高密度聚类算法的变种,特别适合处理大规模复杂数据集,广泛应用于数据挖掘和机器学习领域,能够有效地识别高密度区域并形成簇。

HDBSCAN的三大特点
-
自动聚类数量 -
HDBSCAN不需要预先指定簇的数量,能自动根据数据的密度分布决定最优的簇数量。 -
噪声点处理 -
这个库能有效识别并处理噪声点,与其他聚类算法相比,在处理异常值方面表现出色。 -
适应不同密度 -
它能够识别并适应数据集中各个簇的不同密度,这使得它在多种应用场景中都非常有效。
最佳实践
项目地址:https://github.com/scikit-learn-contrib/hdbscan
安装方法:
pip install hdbscan
功能一:基本聚类
利用HDBSCAN进行基本的聚类操作非常简单。下面是如何在Python中使用HDBSCAN来进行聚类的示例:
>>> import hdbscan
>>> from sklearn.datasets import make_blobs
>>>
>>> # 生成模拟数据
>>> data, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.60, random_state=42)
>>>
>>> # 创建HDBSCAN对象
>>> clusterer = hdbscan.HDBSCAN(min_cluster_size=10)
>>> cluster_labels = clusterer.fit_predict(data)
>>>
>>> # 打印聚类结果
>>> print(cluster_labels)
[0 0 1 2 0 2 1 2 1 1 1 2 1 1 0 1 0 2 1 1 1 1 2 0 1 0 0 2 2 1 1 1 0 1 0 1 0
2 0 2 2 1 0 2 1 1 0 2 0 2 2 0 0 1 0 2 0 1 2 1 0 2 2 0 0 2 2 0 0 1 2 0 0 1
1 0 0 2 1 2 1 1 0 1 2 0 0 1 2 1 0 1 0 1 1 0 0 1 0 0 2 1 2 1 1 1 1 1 2 0 2
1 1 1 1 2 0 2 0 2 2 2 1 0 0 0 0 1 0 0 1 1 1 1 1 2 2 0 1 0 1 1 0 1 2 2 2 1
2 1 1 0 2 0 1 2 2 0 0 1 1 0 0 0 1 0 2 1 1 1 1 1 2 1 2 2 2 1 2 2 0 1 0 2 2
0 2 1 2 2 0 0 2 0 2 2 2 2 1 0 1 1 2 2 1 2 0 0 2 1 1 0 2 2 0 0 0 0 1 0 0 2
0 0 1 2 0 0 2 1 1 0 1 0 2 2 0 2 0 0 0 2 2 1 0 2 2 2 0 2 0 2 0 2 2 0 2 1 0
1 1 1 0 1 2 2 0 2 2 1 1 2 2 2 0 0 0 1 1 1 2 2 2 2 0 2 0 2 2 0 1 2 2 1 0 1
2 1 0 0]
功能二:可视化聚类结果
HDBSCAN支持多种可视化方式来帮助理解聚类结果,如使用matplotlib绘制聚类结果:
import seaborn as sns
import hdbscan
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成模拟数据
data, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.60, random_state=42)
# 创建HDBSCAN对象
clusterer = hdbscan.HDBSCAN(min_cluster_size=10)
cluster_labels = clusterer.fit_predict(data)
# 绘制聚类结果
palette = sns.color_palette()
cluster_colors = [palette[x] if x >= 0 else (0.5, 0.5, 0.5) for x in cluster_labels]
plt.scatter(data[:, 0], data[:, 1], c=cluster_colors)
plt.title('HDBSCAN Clustering')
plt.show()

高级功能:软聚类
软聚类是一种数据点可以属于多个聚类的算法。HDBSCAN通过计算每个点属于聚类的概率,支持软聚类的概念。示例如下:
import hdbscan
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import matplotlib as mpl
from scipy.spatial.distance import cdist
%matplotlib inline
sns.set_context('poster')
sns.set_style('white')
sns.set_color_codes()
plot_kwds={'alpha':0.25, 's':60, 'linewidths':0}
palette = sns.color_palette('deep', 12)
data = np.load('clusterable_data.npy')
fig = plt.figure()
ax = fig.add_subplot(111)
plt.scatter(data.T[0], data.T[1], **plot_kwds)
ax.set_xticks([])
ax.set_yticks([])

上面代码展示了数据在初次加载隶属于不同类别的分布
clusterer = hdbscan.HDBSCAN(min_cluster_size=15).fit(data)
pal = sns.color_palette('deep', 8)
colors = [sns.desaturate(pal[col], sat) for col, sat in zip(clusterer.labels_,
clusterer.probabilities_)]
plt.scatter(data.T[0], data.T[1], c=colors, **plot_kwds);
之后引入HDBSCAN对数据软聚类并可视化分布

小总结
HDBSCAN是一个功能强大的聚类库,适用于处理各种复杂的数据集。通过自动确定聚类数量和优秀的噪声处理能力,它提供了一种高效且灵活的方式来进行数据分析和模式识别。
—— End ——
【限时福利】专为粉丝打造的《Python入门到入魔保姆级教程》来啦!
现在扫码或者添加 vx:257735 即可领取
原文始发于微信公众号(木木夕咦):Hdbscan,一个实用的python库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/286212.html