我应该使用哪种算法将庞大的二进制数据集聚为几类?


11

我有一个很大的(650K行* 62列)二进制数据矩阵(仅0-1个条目)。矩阵大部分是稀疏的:大约占8%。

我想将其分为5组-从1到5命名。我尝试了层次化群集,但是它无法处理大小。考虑到长度为62的650K位向量,我还使用了基于汉明距离的k-means聚类算法。在这些情况下,我都没有得到正确的结果。

请帮忙。


我无法评论我的1个代表的b / c,所以我不得不输入这个作为答案。您可能会研究“ Jaccard相似性”。我认为python scipy具有它的实现。Jaccard ...
gobrewers14

是否有任何理由假设数据至少在一定程度上自然分为五类?您是否真的对行聚类感兴趣,还是对位向量中编码的62个特征之​​间的关系感兴趣?如果是后者,则其他技术更适合。
micans 2014年

Answers:


4

您在问错问题。

而不是询问“什么算法”,您应该询问“什么是应用程序中有意义的类别/集群”。

我对上述算法不起作用并不感到惊讶-它们是针对非常不同的用例设计的。K-手段确实没有与其他任意距离的工作。请勿在汉明距离上使用它。之所以将其称为k- means是有原因的,仅当算术平均值有意义时才使用 它(不适用于二进制数据)。

您可能想尝试使用k模式,IIRC是一个变体,实际上是要与类别数据一起使用的,而二进制数据则是某种类别的(但是稀疏性可能仍然会使您丧命)。

但是首先,是否已删除重复项以简化数据,并删除了唯一/空列?

也许APRIORI或类似方法对您的问题也更有意义。

无论哪种方式,首先要弄清楚您需要什么,然后哪种算法可以解决此难题。工作数据驱动,而不是尝试随机算法。


您能解释一下为什么“不要使用汉明距离”吗?毕竟它在Matlab中可用,这可能是有道理的。如果有道理,我不介意提出一个新问题。
Dror Atariah

因为卑鄙。算术平均值对汉明距离或二进制数据毫无意义。请改用modemedoid
退出了–Anony-Mousse 2015年

只是为了确保我做对了:当使用k均值和汉明度量时,matlab在更新质心时使用算术平均值。那正确吗?在Matlab中使用此指标的正确方法是什么?
Dror Atariah 2015年

k均值称为k- 均值,因为它使用均值。否则,它被称为k型,k型等。均值对L2有用-偏差平方的总和。
已退出–Anony-Mousse 2015年

因此,matlab将k- 均值与汉明度量一起使用;这没有多大意义。
Dror Atariah 2015年

3

也许我的回答有点晚了,但可能对将来的某些机构很有用。

自适应共振理论是解决二进制分类问题的一种很好的算法。查看ART1。更多信息,请参见第19章的免费神经网络设计书。

该网络结合了出色的生物学思想和良好的数学实现。同样,该算法易于实现,在本书中,您还可以找到有关如何构建此分类器的分步说明。


2

二进制数据聚类的经典算法是Bernoulli Mixture模型。可以使用贝叶斯方法拟合模型,也可以使用EM(期望最大化)拟合模型。您可以在整个GitHub上找到示例python代码,而前者功能更强大,但难度也更大。我在GitHub上有该模型的C#实现(使用具有限制性许可证的Infer.NET!)。

该模型非常简单。首先对数据点所属的集群进行采样。然后根据数据集中的维数独立地从尽可能多的伯努利抽样。请注意,这意味着在给定簇的情况下二进制值的条件独立性!

在贝叶斯设置中,优先于群集的分配是Dirichlet分布。如果您认为某些群集大于其他群集,则可以在此处放置优先级。对于每个集群,您必须为每个Bernoulli分配指定一个先验的Beta分布。通常,此先验值是Beta(1,1)或统一值。最后,别忘了在给定数据后随机初始化集群分配。这将破坏对称性,并且采样器不会卡住。

在贝叶斯环境中,BMM模型具有几个很酷的功能:

  1. 在线群集(数据可以作为流到达)

  2. 模型可用于推断缺少的尺寸

当数据集很大并且不适合计算机的RAM时,第一个非常方便。第二个可以用于各种丢失的数据插补任务,例如。估算缺少的MNIST二进制图像的一半。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.