监督聚类 - 评估每个真实标签的指标?

Posted

技术标签:

【中文标题】监督聚类 - 评估每个真实标签的指标?【英文标题】:Supervised Clustering - Metric to Evaluate Each Ground Truth Label? 【发布时间】:2020-06-26 05:27:54 【问题描述】:

我正在对数据集执行 K-means 聚类,但我有可用的地面实况标签。我在聚类过程中使用它们来查找 V-Measure 和 Adjusted Rand 分数以获得最佳 K。

为了评估我的最佳模型,我希望每个已知标签都有一个指标来描述它的聚类程度 - 几乎类似于纯度分数,但标签分布在多个集群中。

例如,标签 0 有 5 个数据点,因此我们有以下内容: true_labels = [0,0,0,0,0] cluster_numbers = [1,1,1,1,1](即所有标签 0 点都在同一个簇中) --> 应该返回 1.0 的满分

如果标签的点像这样分布在多个集群中 cluster_numbers = [0,0,0,1,1] --> 返回分数为0.6

是否有人知道可用于评估聚类中每个基本事实标签的指标?这不必与我上面给出的示例相同。

【问题讨论】:

【参考方案1】:

我认为您可以尝试评估混淆矩阵并检查多数票。例如我们使用 iris 数据集:

from sklearn.datasets import load_iris
from sklearn.cluster import SpectralClustering
from sklearn.metrics import confusion_matrix
import pandas as pd
    
data = load_iris()
df = pd.DataFrame(data.data, 
columns=['sepal.length','sepal.width','petal.length','petal.width'])
labels = data.target

我们执行谱聚类:

clustering = SpectralClustering(n_clusters=3,
assign_labels="discretize",random_state=0).fit(df)
    
M = confusion_matrix(labels,clustering.labels_)
    
M
array([[ 0, 50,  0],
      [ 2,  0, 48],
      [37,  0, 13]])

对于每一行,您都有每个标签的预测。你上面的纯度是:

np.max(M,axis=1)/np.sum(M,axis=1)
array([1.  , 0.96, 0.74])

如果您想要一份整体协议,您可以使用:

from sklearn.metrics import adjusted_rand_score
adjusted_rand_score(labels,clustering.labels_)
0.7436826319432357

【讨论】:

【参考方案2】:

为什么不将调整后的兰特分数也用于此目的? 如果需要,您可以为每个集群计算它并在集群之间进行平均。 它忽略了排列,这对您的应用程序来说是一个优势

【讨论】:

如何为每个集群计算这个?在 scikit learn 中,尝试使用 adjusted_rand_score([0,0,0], [0,1,1]) 查找调整后的 Rand 分数会得到 0.0,除非第一个列表中至少有两个集群。

以上是关于监督聚类 - 评估每个真实标签的指标?的主要内容,如果未能解决你的问题,请参考以下文章

多标签外部聚类评估指标的 NMI 和 B3 等效项

聚类算法的评估指标

机器学习sklearn(二十八): 模型评估量化预测的质量聚类指标/虚拟估计

如何评估 R 中的 kmeans 聚类性能

如何分析没有真实标签的聚类的完整性?

sklearn聚类算法评估方法 之各种系数