【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中的聚类指标,并将其应用于实际的数据分析和聚类任务中



















