【问题标题】:Hierarchical clustering of text, at scale文本的层次聚类,大规模
【发布时间】:2015-09-12 11:07:11
【问题描述】:

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

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

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

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

StackOverflow 社区中是否有人对如何大规模对分类变量执行层次聚类有任何想法/建议?

【问题讨论】:

    标签: cluster-analysis mahout hierarchical-clustering


    【解决方案1】:

    我不知道如何回答“如何扩展 hclust?”为您的数据集。在问题上投入更多的硬件/RAM,和/或寻找一个聪明的分布式实现(不过,Spark MLLib 1.4 没有实现层次聚类)。

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

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

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

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

    如果你已经有一个带有类属性的训练集,你不妨试试 RWeka::J48() 分类器来创建决策树和一些预测。你会得到一些分层的东西,并且在调整之后,有你想要的尽可能多的级别。

    如果你不想使用 RWeka,可以使用包 rpart::rpart() 来做决策树。

    【讨论】:

    • 非常感谢,@knb。我将查看 RWeka 的 EM 集群器。在这种特殊情况下,我需要构建一个将在几毫秒内响应预测的服务。将相似值的组聚集在一起的目的是试图保留来自该数据的“信号”,但最小化运行时的时间成本。聚类将离线执行,并将值存储在内存映射中。这是堆叠模型的一部分。
    猜你喜欢
    • 2018-12-26
    • 2013-05-08
    • 2018-10-04
    • 2014-06-28
    • 2016-08-07
    • 1970-01-01
    • 2015-08-12
    • 2020-06-28
    • 2016-09-06
    相关资源
    最近更新 更多