|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数


我们可以通过对一系列曲目进行聚类来创建歌曲的自动播放列表 , 我们可以展示如何自动创建相似歌曲的子组 。 通过我们现有的歌曲知识 , 我们能够验证该聚类练习的结果 。
但是 , 如果我们对数据没有这种先验知识怎么办?如果数据甚至都没有被标记怎么办(在许多实际的聚类案例中就是这种情况)?即使是这样 , 如果这些标签最初对我们没有意义 , 该怎么办?有很多我从未听说过的艺术家 , 如果我们要对数千首曲目进行分组 , 那么手动验证每个集群显然是不切实际的 。 在这些情况下 , 我们需要某种数学方法来衡量聚类的''成功''程度 。
为了探索如何做到这一点 , 我们再次转向Spotify的API 。 假设我们从四个完全不同的播放列表中选取歌曲:

  • Rap UK
  • Smooth Jazz
  • Classical Essentials
  • Essential K-Pop
如果我们将它们合并到一个数据集中 , 则无监督的机器学习算法应该能够将其歌曲分组为四个群集 , 这些群集在某种程度上类似于原始的四个播放列表 。
在开始之前 , 我们确实可能需要检查一下我们的假设 , 即来自这些不同播放列表的歌曲确实''与众不同'' 。 当然 , 在单个图表上同时可视化两个以上的特征是一项挑战 。 但是 , 如果我们绘制所有功能的散布矩阵 , 并按播放列表进行颜色编码 , 则可以看到有很多度量组合可以证明每种流派的独特特征 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图


我们在上中看到 , 在Scikit-Learn中运行聚类算法非常简单:
#We scale the data to ensure that #feature units don't impact distances from sklearn.preprocessing import StandardScaler sclaer = StandardScaler() X_scaled = scaler.fit_transform(X)#This scaled data can then be fed into the HAC algorithm from sklearn.cluster import AgglomerativeClustering #We can tell it how many clusters we're aiming for agg_clust = AgglomerativeClustering(n_clusters=4) assigned_clusters = agg_clust.fit_predict(X_scaled)我们还看到 , HAC具有三个不同的''链接标准'' , 即该算法将群集逐渐连接在一起的方法:
  • ward(默认):选择两个聚类 , 以所有聚类中的方差增加最小的方式合并 。 通常 , 这会导致大小相当相等的群集 。
  • complete(或最大链接):合并两个点之间最大距离最小的两个聚类 。
  • ·average:合并所有点之间平均距离最小的两个聚类 。
让我们看看这三个链接标准如何处理类型播放列表数据集 。 我们用矩阵表示结果 , 显示每个播放列表的歌曲在每个群集中所占的百分比(群集被任意命名为'' A'' , '' B'' , '' C''和'' D'') 。
当然 , 如果聚类是完美的 , 我们希望矩阵的每一行和每一列都恰好包含一个100%的条目(当然 , 它不需要成对角线 , 因为聚类名称的分配是任意的) 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

默认的''向后''链接试图最小化群集中的方差 , 尽管这四个群集都有一些泄漏 , 但在所有四种类型中都表现出色 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

''完全''链接显然效果不佳 。 它已将许多数据集放入群集A 。 群集C由一首说唱歌曲组成 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

''平均''链接与''完全''链接具有类似的问题 。 许多数据点已放置在一个群集中 , 其中两个群集由一首歌曲组成 。


推荐阅读