Jaccard系数的独特原理

时间:2018-05-10 15:13:55

标签: r cluster-analysis hierarchical-clustering

您好我有一个可以使用以下方法模拟的数据集:

set.seed(123)
v1 <- rbinom(10000, 1, .2)
v2 <- rbinom(10000, 1, .3)
v3 <- rbinom(10000, 1, .25)
v4 <- rbinom(10000, 1, .5)
v5 <- rbinom(10000, 1, .35)
v6 <- rbinom(10000, 1, .2)
v7 <- rbinom(10000, 1, .3)
v8 <- rbinom(10000, 1, .25)
v9 <- rbinom(10000, 1, .5)
v10<- rbinom(10000, 1, .35)
dats <- data.frame(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)

我正在使用Jaccard距离来创建一个距离结构,如下所示:

dat.jac <- philentropy::distance(dats, method = "jaccard") 

所以这是我的问题:由于这些是二进制变量,这意味着最多有2 ^ 10 = 1024个唯一组。这是否意味着我有超过1024点的数据?另一种问题是我需要计算独特观测值的Jaccard距离并使用观测值作为权重,还是只计算每个观测(行)的Jaccard距离以得到距离矩阵?在编程方面,我应该继续下列哪一项?

dat.jac <- philentropy::distance(dats, method = "jaccard") 

dat.jac <- philentropy::distance(unique(dats), method = "jaccard")

我的目标是使用以下代码在分层聚类中使用距离矩阵:

dist.jac.mat<- as.matrix(dist.jac)
dist.jac.mat[is.na(dist.jac.mat)] <- 0 
hc <- hclust(as.dist(dist.jac.mat), method = "single")
fviz_nbclust(dats, FUN = hcut, diss = as.dist(dist.jac.mat), k.max = 15, 
nboot = 250, method = "silhouette")

1 个答案:

答案 0 :(得分:1)

对于单链接,仅使用唯一点确实就足够了。 因为数量对于单个和完整的链接无关紧要。 对于其他联系,这通常不成立。在那里你需要使用加权聚类,并按重复数量加权。

但是,您会遇到其他问题:

由于您几乎拥有所有组合,因此群集将毫无用处。只有极少数可能的距离,你的树形图可能只有很少的水平,直到一切都连接。这是这类数据所固有的。群集最适用于连续变量,在这些变量中,重复距离非常短。