首页 > 解决方案 > 如何使用 KMeans 在 Spark 中对推文进行聚类?

问题描述

我想根据主题对推文进行聚类(例如,一个集群中的所有亚马逊推文,另一个集群中的所有 Netflix 推文,等等)问题是,所有传入的推文都已经根据这些关键字进行了过滤,但是它们被混淆了,我只是在它们进来时对其进行分类。

我正在使用 Spark 流,并正在寻找一种方法来矢量化这些推文。因为这是批处理,所以我无法访问整个推文语料库。

标签: apache-sparkmachine-learningstatisticscluster-analysisapache-spark-mllib

解决方案


如果您有一个预定义的词汇表,其中可能同时选择了多个术语 - 例如您感兴趣的一组非互斥 tweet类别 - 那么您可以拥有一个二进制向量,其中每个位代表一个类别。

如果类别是互斥的,那么您希望通过聚类实现什么?具体来说,不会有“灰色区域”,其中一些观测属于 CategorySet-A,其他观测属于 CategorySet-B,其他观测属于某个中间组合。如果每个观察都被固定在一个类别中,那么您将拥有离散 而不是集群。

相反,如果您希望基于相似的词集进行聚类——那么你可能需要预先知道“词汇”——在这种情况下,这意味着:“我关心的推文术语是什么”。在这种情况下,您可以使用bag of words模型 https://machinelearningmastery.com/gentle-introduction-bag-words-model/来比较推文 - 然后根据生成的向量进行聚类。

现在,如果你不确定先验词汇——这很可能是这种情况,因为你不知道下一条推文的内容是什么——那么你可能会定期重新聚类——当你获得新词时. 然后,您可以使用包含新“看到”术语的更新。 bag of words请注意,这会产生处理成本和延迟。为了避免成本/延迟,您必须提前决定限制您的集群的条款:如果您对目标主题感兴趣,这可能是可能的。


推荐阅读