运行 K-Means 聚类后寻找最佳聚类

数据挖掘 k-均值 相似
2022-03-03 05:17:58

我有一堆文本,我想根据语义相似性进行分离。通过 K-Means 运行,我能够将完整的文本分成不同的集群。

但是,我仍然需要找到哪个集群包含最相似的文本。例如:-

集群 1:-
“嘿,你好吗”。
'你好吗亲爱的'。
“我已经三天没见到你了。你好吗'。

第 2 组:-
“根据所进行的调查,吸烟造成的死亡人数超过……”。
“避免在公共场所吸烟。”。
'如果他们......人们更有可能避免吸烟'。
“根据进行的调查,人们最有可能选择民主人士”。

集群 1 应该排在集群 2 之上,因为它在其中包含的文本之间具有更多的语义相似性。

2个回答

通常,您用于 k-means 聚类的库将在运行 k-means 过程后报告“簇内平方和”值。较小的值意味着集群紧密绑定(大多数消息彼此相似)。您可以使用此值对集群 ID 进行排序。

假设您已经根据一些单词/字符向量对它们进行了聚类,您的聚类算法可能会为每个聚类生成一个质心点。

现在,下一步取决于您对“更高排名”的定义。您是否认为文本分布非常密集的集群具有良好的排名?或者你想要别的东西(例如没有异常值的集群)这取决于你自己的定义(取自你的问题):

'包含最相似的文字'

现在,下一步将是计算集群中每段文本之间的平均欧几里德距离/余弦相似度/某种距离度量。假设您对最相似的文本集群感兴趣,那么质心和文本向量之间平均距离最小的集群将是排名最高的集群。

可是等等!还有更多的微妙之处。

需要注意的三个重要事项:

  1. 您使用的距离度量对于成功至关重要。请阅读不同的度量标准,例如欧几里得距离、曼哈顿距离、余弦相似度等。它们中的每一个都有自己的优势,这取决于您对文本相似度的定义你必须知道你想要什么——你将如何处理不同长度的文本?您是否只想在排名相似性中考虑不常见/稀有词?根据您回答这些问题的方式,可以使用不同的指标。

  2. 您可能希望事先对您的文本进行特征工程。例如,您最终可能会得到将包含许多“a”、“the”和“I”的文本分组的集群(这在叙事文本中更常见,而不是在新闻文章中)。您也许可以使用一些现有的库和词干分析器预先删除这些词。

  3. 为了可视化集群的分布,您可以尝试使用 PCA 将词向量空间减少到 2D。聚类算法因失败的边缘情况而臭名昭著(请参阅没有免费午餐定理)。如果你的聚类算法一开始就失败了,那么尝试对它们进行排名是没有意义的。