我有一个大型数据集(数十亿条记录),几乎完全由分类变量组成。该数据将用于预测相当罕见的数字结果。大多数属性具有高基数:只有少数样本属于每个类别。
我阅读了阅读an interesting paper,他们在R中使用层次聚类来减少类似任务的维度。以下代码适用于小型数据集,但在扩展时会迅速消耗所有内存:
library(cluster)
numClusters = 42
hc <- hclust(daisy(df))
cutree(hc, k = numClusters)
我考虑过使用Mahout的kmeans实现,但这不适用于分类变量,因为它需要一个双精度矢量。
StackOverflow社区中是否有人对如何大规模对分类变量执行层次聚类有任何想法/建议?
答案 0 :(得分:1)
我不知道如何回答&#34;如何缩小hclust?&#34;为您的数据集。在问题上投入更多的硬件/ RAM,和/或搜索一个聪明的分布式实现(但Spark MLLib 1.4并没有实现分层聚类)。
你的问题有点令人困惑,请阅读为什么我这么认为。
我不明白层次聚类最终会如何帮助您预测数字类属性。
如果您确实需要对分类属性进行聚类,请检查EM clusterer / algorithm的实现,例如:在R包RWeka。默认情况下,EM的实现确定了最佳的簇数(可能是局部最小值?),它给出了层次结构中每个分类值的概率,以及每个簇的先验概率。
您可以使用其他群集算法或包。
如果您已经拥有了具有类属性的训练集,那么您也可以尝试使用RWeka :: J48()分类器来创建决策树和一些预测。你会得到一些等级的东西,并且在调整之后,你可以获得你想要的多少级别。
如果您不想使用RWeka,可以使用包rpart :: rpart()作为决策树。