如何评估 HDBSCAN 文本集群?

How to evaluate HDBSCAN text clusters?

我目前正在尝试使用 HDBSCAN 对电影数据进行聚类。目标是将相似的电影聚类在一起(基于电影信息,如关键字、流派、演员姓名等),然后将 LDA 应用于每个聚类并获得具有代表性的主题。但是,我很难评估结果(除了视觉分析,随着数据的增长,视觉分析效果并不好)。对于 LDA,虽然很难对其进行评估,但我一直在使用一致性度量。但是,有人知道如何评估 HDBSCAN 生成的集群吗?我找不到太多关于它的信息,所以如果有人有任何想法,我将不胜感激!

在无监督学习中到处都是同样的问题。

它是无人监督的,你正在尝试发现一些新的有趣的东西。计算机无法确定某些东西是否真的有趣或新鲜。当先验知识已经以机器可处理的形式编码时,它可以决定一些简单的情况,并且您可以计算一些启发式值作为兴趣的代理。但是这样的措施(包括基于密度的措施,如 DBCV 实际上并没有比聚类算法本身选择 "best" 解决方案更好地判断这一点)。

但最后,没有办法绕过手动查看数据,然后执行后续步骤 - 尝试将您从数据中学到的知识付诸实践。估计你不是invory tower academic 只是为了编造一个无用的方法才这么做的。。所以用它,不要假装使用它。

HDBSCAN 实现 Density-Based Clustering Validation in the method called relative_validity。它将允许您将使用一组给定的超参数获得的一个聚类与另一个聚类进行比较。 一般来说,阅读 cluster analysis and cluster validationHere's 与 HDBSCAN 库的作者对此进行了很好的讨论。

您可以尝试 clusteval 库。该库可帮助您找到数据集中的最佳簇数,对于 hdbscan 也是如此。当你有集群标签时,你可以使用 hnet.

开始富集分析
pip install clusteval
pip install hnet

示例:

# Import library
from clusteval import clusteval
# Set the method
ce = clusteval(method='hdbscan')
# Evaluate
results = ce.fit(X)
# Make plot of the evaluation
ce.plot()
# Make scatter plot using the first two coordinates. 
ce.scatter(X)

因此,此时您拥有最佳检测到的集群标签,现在您可能想知道任何集群与元数据中的(一组)特征之间是否存在关联。这个想法是为每个集群标签计算在元数据中特定 class 的出现频率。这可以用 P 值定义。 P 值越低(低于 alpha=0.05),随机发生的可能性就越小。

results 是一个字典,包含键 labx 中的最佳集群标签。使用 hnet 我们可以很容易地计算浓缩度。可以在此处找到更多信息:https://erdogant.github.io/hnet

# Import library
import hnet

# Get labels
clusterlabels = results['labx']

# Compute the enrichment of the cluster labels with the dataframe df
enrich_results = hnet.enrichment(df, clusterlabels)

当我们查看 enrich_results 时,有一列带有 category_label。这些是我们作为输入提供的数据帧 df 的元数据变量。第二列:P代表P值,即catagory_label与目标变量y的计算显着性。在这种情况下,目标变量 y 是集群标签 clusterlabels.

y 中的目标标签可以多次显着丰富。这意味着某些 y 丰富了数据框中的多个变量。发生这种情况是因为我们可能需要更好地估计集群标签或其混合组或其他东西。

可以在此处找到有关集群丰富的更多信息: https://erdogant.github.io/hnet/pages/html/Use%20Cases.html#cluster-enrichment