【Sklearn驯化-聚类指标】搞懂机器学习中聚类算法评估指标,轮廓系数、戴维森堡丁指数
本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
🌵文章目录🌵
- 🎯 1. 基本介绍
- 💡 2. 公式推导
- 2.1 轮廓系数(Silhouette Coefficient)
- 2.2 戴维森堡丁指数(Davies-Bouldin Index)
- 🔍 3. 代码实践
- 3.1 数据生成
- 3.2 训练聚类模型
- 3.3 计算轮廓系数
- 3.4 计算戴维森堡丁指数
- 🔍 4. 注意事项
- 🔍 5. 总结
下滑查看解决方法
🎯 1. 基本介绍
聚类作为无监督学习的核心任务之一,旨在将数据集中的样本划分为若干个簇,使得簇内的样本相似度高,簇间的样本相似度低。然而,由于缺乏真实标签,聚类效果的评估成为一个挑战。scikit-learn(简称sklearn)提供了多种聚类指标来量化聚类效果。
💡 2. 公式推导
2.1 轮廓系数(Silhouette Coefficient)
轮廓系数是衡量样本与簇内样本和簇间样本距离的指标。对于每个样本i,轮廓系数计算公式为:
s
(
i
)
=
b
(
i
)
−
a
(
i
)
m
a
x
(
a
(
i
)
,
b
(
i
)
)
s(i)=\frac{b(i)-a(i)}{max(a(i), b(i))}
s(i)=max(a(i),b(i))b(i)−a(i)
其中:
- a(i)是样本i与同一簇内其他样本的平均距离。
- b(i)是样本i与最近簇内样本的平均距离。
- 轮廓系数的范围从-1到1,接近1表示聚类效果好,0表示样本可能位于两个簇的边界上,-1表示聚类错误。
2.2 戴维森堡丁指数(Davies-Bouldin Index)
戴维森堡丁指数衡量簇内距离和簇间距离的比率。对于所有簇,戴维森堡丁指数计算公式为:
B
=
1
c
∑
=
1
c
m
a
x
i
!
=
j
(
s
i
+
s
j
d
i
j
)
B=\frac{1}{c}\sum_{=1}^{c}max_{i!=j}(\frac{s_i+s_j}{d_{ij}})
B=c1=1∑cmaxi!=j(dijsi+sj)
- 其中:
- c是簇的数量。
- s_i和s_j分别是第i个和第j个簇的簇内距离(方差)。
- d_ij是簇i和簇j的中心之间的距离。
- DB指数越低表示聚类效果越好。
🔍 3. 代码实践
3.1 数据生成
为了更佳直观的掌握聚类算法中各个指标的原理和具体用法,我们构建简单的数据,对其进行实践,具体数据生成的代码如下所示:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, davies_bouldin_score
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
3.2 训练聚类模型
我们以kmeans聚类算法为例,对其进行效果的评估,下面为训练聚类算法的代码过程,具体如下所示:
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
3.3 计算轮廓系数
下面我们对聚类算法通过上述的两个指标进行评估,以此来判断聚类算法的好坏,具体的代码如下所示:
# 计算轮廓系数
silhouette_avg = silhouette_score(X, kmeans.labels_)
print(f"轮廓系数: {silhouette_avg:.2f}")
3.4 计算戴维森堡丁指数
下面我们对聚类算法通过上述的两个指标进行评估,以此来判断聚类算法的好坏,具体的代码如下所示:
# 计算戴维森堡丁指数
db_score = davies_bouldin_score(X, kmeans.labels_)
print(f"戴维森堡丁指数: {db_score:.2f}")
🔍 4. 注意事项
- 聚类指标依赖于簇的数量和数据分布,需要根据具体问题选择合适的簇数量。
- 轮廓系数对簇形状和大小敏感,可能不适用于非球形簇。
- 戴维森堡丁指数在簇大小差异较大时可能不太准确。
🔍 5. 总结
聚类指标是评估聚类效果的重要工具。在sklearn中,我们可以使用轮廓系数和戴维森堡丁指数等指标来量化聚类的性能。通过理解这些指标的计算方法和适用场景,我们可以更好地评估和优化聚类模型。希望这篇博客能帮助你更深入地理解sklearn中的聚类指标,并将其应用于实际的数据分析和聚类任务中