我有一个很大的数据集(数十亿条记录),它几乎完全由分类变量组成。这些数据将被用来预测一个相当罕见的数值结果。大多数属性都具有很高的基数:可能只有少数几个样本属于每个类别。
我阅读了一篇有趣的论文,其中他们使用R中的分层聚类来降低类似任务的维数。以下代码用于小型数据集,但在扩展时会迅速消耗所有内存:
library(cluster)
numClusters = 42
hc <- hclust(daisy(df))
cutree(hc, k = numClusters)我考虑过使用Mahout的kmeans实现,但这对于分类变量来说是行不通的,因为它需要一个双倍向量。
StackOverflow社区中有没有人对如何对分类变量进行分级聚类有任何想法或建议?
发布于 2015-06-27 10:32:10
我不知道该怎么回答“如何放大?”你的数据集。在这个问题上抛出更多的硬件/RAM,并/或搜索一个聪明的分布式实现(不过,MLLib 1.4并不实现分层集群)。
你的问题有点令人困惑,请阅读我认为是这样的原因。
最后,我不明白分层聚类将如何帮助您预测数值类属性。
如果您确实需要对分类属性进行聚类,请检查EM聚类器/算法的实现,例如在R包RWeka中。默认情况下,EM的实现决定了集群本身的最佳数量(可能在局部最小?)它给出了层次结构中每个分类值的概率,以及每个集群的先验概率。
您可以使用其他群集算法或包。
如果您已经有了带有类属性的培训集,那么不妨尝试使用RWeka::J48()分类器来创建决策树和一些预测。您将得到一些层次化的东西,并且在调优之后,您可以得到任意多的级别。
如果不想使用RWeka,可以使用package::rpart()作为决策树。
https://stackoverflow.com/questions/31057181
复制相似问题