聚类二进制矩阵


22

我有一个尺寸为250k x 100 的二进制特征的半小矩阵。每行是一个用户,列是某些用户行为的二进制“标签”,例如“ likes_cats”。

user  1   2   3   4   5  ...
-------------------------
A     1   0   1   0   1
B     0   1   0   1   0
C     1   0   0   1   0

我想让用户适合5-10个集群,并分析负载以查看是否可以解释用户行为组。似乎有很多方法可以在二元数据上拟合聚类-我们认为什么是此数据的最佳策略?

  • PCA

  • 制作Jaccard相似度矩阵,拟合层次集群,然后使用顶部的“节点”。

  • K中位数

  • K-类固醇

  • 前肢

  • 艾格尼丝

到目前为止,我在使用分层群集方面取得了一些成功,但是我真的不确定这是最好的方法。

tags = read.csv("~/tags.csv")
d = dist(tags, method = "binary")
hc = hclust(d, method="ward")
plot(hc)
cluster.means = aggregate(tags,by=list(cutree(hc, k = 6)), mean)

在此处输入图片说明


1
对于大型(许多节点)和高维数据,尝试图聚类算法(使用例如tanimoto相似性和诸如Louvain聚类,RNSC,mcl之类的方法)也是值得的。我怀疑您的数据类型是否会生成有意义的聚类(当然,这很可能会产生),但是这些疑问通常与聚类有关,而与特定类型的聚类无关。PCA绝对是可以尝试的东西。
micans 2014年

6
老实说,我很惊讶这个问题吸引了这么少的关注。为什么会这样呢?对我来说,这听起来像是一个非常有趣的问题。
Dror Atariah,2015年

Answers:


9

潜在类分析是一种可能的方法。

采取以下概率分布,其中A,B和C可以取值为1或0。

P一种一世ĴCķ

如果它们彼此独立,那么我们期望看到:

P一种一世ĴCķ=P一种一世PĴPCķ

一旦消除了这种可能性,我们就可以假设任何观察到的依存关系是由于在其他情况下未观察到的子组内的值聚类所致。为了验证这个想法,我们可以估计以下模型:

P一种一世ĴCķ=PXñP一种一世|XñPĴ|XñPCķ|Xñ

其中是具有级别的潜在分类变量。您指定,即可通过期望最大化来估计模型参数(类成员的边际概率,以及每个变量的类特定概率)。ñ ñXññ

在实践中,您可以估计模型,其中,并根据理论,基于似然的拟合指数和分类质量(可以通过计算观察)。5ñ10

但是,尝试在5-10个组中的100个变量中识别有意义的模式可能需要在估计模型之前减少该列表,这本身就是一个足够棘手的话题(REF)。


很棒,很有趣。您会说使用该技术优于其他任何技术的好处?
wije 2014年

优点之一是,聚类是模糊的,可让您考虑任何后续类分配中的不确定性。另一个是因为它是基于模型的方法。您会获得基于似然性的拟合指数,可以帮助指导模型选择。当然,这是以必须做出分布假设为代价的……我相信其他有效的方法也会有其自身的取舍。
DL Dahly 2014年

5

实际上,频繁项集挖掘可能比在此类数据上进行聚类更好。

通常的面向矢量的算法集没有多大意义。例如,K均值将产生不再是二进制的均值。


即使我希望聚集用户而不是标签(列),使用频繁使用的项目是否有意义?
wije 2014年

1
恕我直言是的。但是出于明显的原因,关联规则并不是对数据集的严格划分。用户可以是一个以上“频繁项目集”的成员。也就是说,用户可能既是猫迷又是狗迷;这两个组并没有被强制分离。
Anony-Mousse

哪个恕我直言实际上是好的。假设每个用户都是一个集群的成员,对我来说似乎太幼稚了。
Anony-Mousse 2014年
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.