【问题标题】:What "label" stand for in scikit learn documentation in the metric for clusering?scikit learn 文档中集群度量标准中的“标签”代表什么?
【发布时间】:2017-11-25 22:35:00
【问题描述】:

我有想要聚类的文本:

# Training
hasher = HashingVectorizer(non_negative=True,norm="l1", analyzer="char", ngram_range=(5,9))
vectorizer = make_pipeline(hasher, TfidfTransformer())
training = vectorizer.fit_transform(list_of_texts)

#LSA
svd = TruncatedSVD(100)
lsa = make_pipeline(svd, Normalizer(copy=False))
training = lsa.fit_transform(training)

# Clustering
km = KMeans(n_clusters=8, init='k-means++', max_iter=300, n_init=3)
km.fit(training)

在这些步骤之后,我想看看我的集群的好坏。我找到了这些指标:

metrics.homogeneity_score(labels_true, labels_pred))
metrics.completeness_score(labels_true, labels_pred))
metrics.v_measure_score(labels_true, labels_pred))
metrics.adjusted_rand_score(labels_true, labels_pred))

我猜labels_pred 代表聚类算法给出的标签。但我不知道labels_true 代表什么,文档状态:

作为参考的真实类别标签

但我没有标签。其他方式我会应用分类算法而不是聚类算法。

那些labels_true应该是什么?如果没有这些标签,我如何评估我的集群?

【问题讨论】:

  • labels_pred 应该是您的预测,您的估算器的结果。 labels_true 是实际值。您需要两者来比较您的预测与实际情况(在您的情况下)的好坏程度。
  • 但我没有“实际值”,否则将是分类问题
  • 你提到的所有上面都有drawback that they require ground truth。请改用silhouette coefficient
  • @VivekKumar 好的,谢谢你能回答吗?
  • 我认为这个问题不适合 StackOverflow。这就是为什么我只评论它。我只建议了一个指标。在 Cross-validated 上试用可能会让您对指标有更好的了解。

标签: python algorithm scikit-learn cluster-analysis


【解决方案1】:

外部评估衡量两个分类。一个假设是已知的良好分类,另一个是聚类的输出。这种度量可以看作是聚类的相似度函数

这仅适用于您有所谓的“基本事实”,它可能适用于学术环境,但通常不会在实际使用中成立。

另一种方法是使用internal 措施,例如Silhouette。但根据我的经验,它们也只适用于低维数据。在文字上,我还没有看到一个高高的剪影。此外,Silhouette 需要 O(n²) 来计算,因此它根本不适用于大型数据集。

【讨论】:

    猜你喜欢
    • 2020-06-22
    • 2015-04-05
    • 2013-07-21
    • 2019-01-14
    • 2013-01-09
    • 2015-11-21
    • 2019-01-15
    • 2017-09-19
    相关资源
    最近更新 更多