大规模文本的层次聚类

Hierarchical clustering of text, at scale

我有一个大型数据集(数十亿条记录),几乎完全由分类变量组成。该数据将用于预测相当罕见的数字结果。大多数属性都具有很高的基数:每个类别中可能只有少数样本。

我读过an interesting paper,他们在 R 中使用层次聚类来降低类似任务的维度。以下代码适用于小型数据集,但在放大时会迅速消耗所有内存:

library(cluster)
numClusters = 42
hc <- hclust(daisy(df))
cutree(hc, k = numClusters)

我考虑过使用 Mahout 的 kmeans 实现,但这不适用于分类变量,因为它需要一个双精度向量。

Whosebug 社区中是否有人 thoughts/advice 了解如何大规模地对分类变量执行层次聚类?

我不知道如何为您的数据集回答 "how to scale hclust up?"。在问题上投入更多 hardware/RAM,and/or 寻找一个聪明的分布式实现(尽管 Spark MLLib 1.4 没有实现层次集群)。

你的问题有点令人困惑,请阅读我为什么这么认为。

我不明白层次聚类最终将如何帮助您预测数字 class 属性。

如果您确实需要对分类属性进行聚类,请检查 EM 聚类器/算法的实现,例如在 R 包 RWeka 中。默认情况下,EM 的实现决定了集群本身的最佳数量(可能是局部最小值?),它为您提供了层次结构中每个分类值的概率,以及每个集群的先验概率。

您可以使用其他聚类算法或包。

如果您已经有了具有 class 属性的训练集,您不妨尝试 RWeka::J48() classifier 来创建决策树和一些预测。你会得到一些分层的东西,并且在调整之后,你想要多少层就多少层。

如果您不想使用 RWeka,可以使用包 rpart::rpart() 作为决策树。