聚类二进制矩阵

机器算法验证 r 聚类 二进制数据
2022-01-18 04:18:41

我有一个尺寸为 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 个集群并分析负载,看看我是否可以解释用户行为组。似乎有很多方法可以在二进制数据上拟合集群 - 我们认为什么可能是该数据的最佳策略?

  • 主成分分析

  • 制作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)

在此处输入图像描述

2个回答

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

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

P(Ai,Bj,Ck)

如果这些是相互独立的,那么我们期望看到:

P(Ai,Bj,Ck)=P(Ai)P(Bj)P(Ck)

一旦消除了这种可能性,我们可能会假设任何观察到的依赖性是由于值聚集在其他未观察到的子组中。为了验证这个想法,我们可以估计以下模型:

P(Ai,Bj,Ck)=P(Xn)P(Ai|Xn)P(Bj|Xn)P(Ck|Xn)

在哪里X是一个潜在的分类变量n水平。你指定n,并且模型参数(类成员的边际概率和每个变量的类特定概率)可以通过期望最大化来估计。

在实践中,您可以估计几个模型,其中5n10,并根据理论、基于似然的拟合指数和分类质量“选择”最佳模型(可以通过计算观察的类成员的后验概率来评估)。

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

实际上,频繁项集挖掘可能是比对此类数据进行聚类更好的选择。

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