我目前正在尝试使用 HDBSCAN 对电影数据进行聚类。目标是将相似的电影聚集在一起(基于关键字、流派、演员姓名等电影信息),然后将 LDA 应用于每个集群并获得具有代表性的主题。但是,我很难评估结果(除了可视化分析,随着数据的增长,这并不是很好)。使用 LDA,虽然很难评估它,但我一直在使用连贯性度量。但是,有人知道如何评估 HDBSCAN 制作的集群吗?我找不到太多关于它的信息,所以如果有人有任何想法,我将非常感激!
3 回答
HDBSCAN在名为relative_validity的方法中实现基于密度的聚类验证。它将允许您将使用一组给定的超参数获得的一个聚类与另一个聚类进行比较。一般来说,请阅读有关聚类分析和聚类验证的信息。 这是与 HDBSCAN 库的作者的一个很好的讨论。
在无监督学习中到处都是同样的问题。
它是无人监督的,你正试图发现一些新的和有趣的东西。计算机无法确定某件事是真正有趣还是新事物。当先验知识已经以机器可处理的形式编码时,它可以决定和微不足道的情况,并且您可以计算一些启发式值作为兴趣的代理。但是这样的度量(包括基于密度的度量,例如 DBCV 实际上并没有比聚类算法本身选择“最佳”解决方案更好地判断这一点)。
但最后,没有办法手动查看数据,然后执行下一步 - 尝试将您从数据中学到的知识付诸实践。据说你不是invory tower 学者,只是因为试图编造另一种无用的方法而这样做......所以使用它,不要假装使用它。
你可以试试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)
因此,此时您拥有检测到的最佳集群标签,现在您可能想知道任何集群与元数据中的(一组)特征之间是否存在关联。这个想法是计算每个集群标签在元数据中出现特定类的频率。这可以用 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-value,它是catagory_label与目标变量 y 的计算显着性。在这种情况下,目标变量 y 是集群标签clusterlabels。
y中的目标标签可以显着丰富不止一次。这意味着某些y针对数据框中的多个变量进行了丰富。这可能是因为我们可能需要更好地估计集群标签或其混合组或其他东西。
更多关于集群丰富的信息可以在这里找到: https ://erdogant.github.io/hnet/pages/html/Use%20Cases.html#cluster-enrichment