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


值得一提的是 , 还有另一种常见的聚类类型 , 即K-Means , 其工作原理略有不同 。 HAC通过将它们合并在一起来迭代地减少聚类的数量 , 而K-Means聚类保持固定数量的聚类(名义上的k) , 但是迭代地更改每个聚类的成员 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图


【|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数】每个群集的''中心''由带有黑色'' +''号的''大''标记表示 。 所有点都分配给它们最接近中心的聚类 。 在此分配步骤之后 , 将重新计算群集中心以包括新成员 , 然后发生另一个重新分配步骤 。 如果在重新分配步骤中没有点更改聚类 , 则算法结束(动画:) 。
K-Means很容易在Python中实现:
#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 K-Means alorithm from sklearn.cluster import KMeans #We can tell it how many clusters we're aiming for km_clust = KMeans(n_clusters=4) assigned_clusters = km_clust.fit_predict(X_scaled)如果将K-Means聚类应用于播放列表数据集 , 则会得到以下信息:
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

与使用''ward''链接的HAC算法一样 , K-Means聚类在大多数算法中都做得很好 , 一些爵士乐和说唱歌曲对K-Pop来说是''错误的'' 。
尽管这些矩阵可以很好地''盯住''我们的结果 , 但它们在数学上还不够严格 。 让我们考虑一些指标 , 这些指标实际上可以帮助我们为集群质量分配一个数字 。

调整后的Rand Index(兰德指数)
该是对经典兰德指数的变化 , 并试图表达什么群集分配比例是''正确'' 。 通过考虑所有样本对 , 并根据预测的真实聚类对分配在预测的相同或不同聚类中的对进行计数 , 并针对随机机会进行调整 , 计算出两个不同聚类之间的相似性度量 。
可以使用Scikit-Learn评估此(以及我们将考虑的其他指标) 。
from sklearn import metrics metrics.adjusted_rand_score(predicted_labels, actual)调整后的兰德指数限制在-1和1之间 。 接近1表示好 , 而接近-1表示差 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

我们看到K均值和Ward Linkage得分很高 。 基于我们先前观察到的矩阵 , 我们期望得到这一结果 。
Fowlkes Mallows Score
该是相似的 , 在尽可能多的 , 它会告诉你哪个集群分配是''正确''的程度 。 特别是 , 它计算精度和召回率之间的几何平均值 。 它的范围是0到1 , 值越高越好 。
metrics.fowlkes_mallows_score(predicted_labels , actual)
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

我们的排名与调整后的兰德指数相似 , 这是我们期望的 , 因为它们是尝试回答同一问题的两种方法 。
值得注意的是 , 我们需要了解原始标签才能计算这些指标 。 鉴于处理无标签数据是无监督学习的主要用例之一 , 因此我们需要一些其他指标来评估聚类结果 , 而无需引用''真实''标签 。
假设我们从三个单独的聚类分析中得到以下结果 。
|如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数
本文插图

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


推荐阅读