如何评估文本聚类?

数据挖掘 机器学习 聚类 文本挖掘
2021-10-04 11:13:07

哪些指标可用于评估文本聚类模型?我用tf-idf+ k-means, tf-idf+ hierarchical clustering, doc2vec+ k-means (metric is cosine similarity), doc2vec+ hierarchical clustering (metric is cosine similarity)如何决定哪种型号最好?

3个回答

看看这篇论文它还解决了使用多少个集群的问题。R 包mclust有一个例程,它将尝试不同的集群模型/集群数量并绘制贝叶斯推理标准 (BIC)。(这里很棒的小插图)。这是一种通用方法,意思是,您可以在不特定域/数据的情况下执行某些操作。(如果您有时间和数据,那么针对特定领域总是好的。)

该图表来自Lucca Scrucca的小插图。MClust 尝试了 14 种不同的聚类算法(由不同的符号表示),将聚类的数量从 1 增加到某个默认值。它每次都会找到 BIC。最高的 BIC 通常是最佳选择。您可以将此方法应用于您自己稳定的聚类算法。

在此处输入图像描述

查看剪影分数

第i个数据点的公式

(b(i) - a(i)) / max(a(i),b(i))

其中b(i) -> 与最近邻簇的相异性

a(i) -> 簇内点之间的差异

这给出了-1和+1之间的分数。

解释

+1 表示非常合身

-1 表示分类错误[应该属于不同的集群]

在计算每个数据点的轮廓分数后,您可以选择集群数量。

代码示例

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score

X, y = make_blobs(n_samples=500,
                  n_features=2,
                  centers=4,
                  cluster_std=1,
                  center_box=(-10.0, 10.0),
                  shuffle=True,
                  random_state=1)  # For reproducibility

range_n_clusters = [2, 3, 4, 5, 6]

for n_clusters in range_n_clusters:
    # Initialize the clusterer with n_clusters value and a random generator
    # seed of 10 for reproducibility.
    clusterer = KMeans(n_clusters=n_clusters, random_state=10)
    cluster_labels = clusterer.fit_predict(X)

    # The silhouette_score gives the average value for all the samples.
    # This gives a perspective into the density and separation of the formed
    # clusters
    silhouette_avg = silhouette_score(X, cluster_labels)
    print("For n_clusters =", n_clusters,
          "The average silhouette_score is :", silhouette_avg)

    # Compute the silhouette scores for each sample
    sample_silhouette_values = silhouette_samples(X, cluster_labels)

拥有一个聚类质量度量会非常好。不幸的是,这个衡量标准很难计算——可能是人工智能很难。您正试图将一个非常复杂的事情简化为一个数字。

如果它是 AI 难的,那么您可以要求人们以某种​​方式对集群进行评分。这并不理想,也不会扩展,但您将拥有一个代表接近您想要的东西的数字。