监督聚类 - 评估每个真实标签的指标?
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
,除非第一个列表中至少有两个集群。以上是关于监督聚类 - 评估每个真实标签的指标?的主要内容,如果未能解决你的问题,请参考以下文章