有约束的聚类

数据挖掘 机器学习 聚类 分类数据
2022-02-19 08:30:05

我有一个这种形式的数据集:

chrX posX labelX

其中chrX是指染色体数,posX是指位置,labelX是一个具有 3 个标签的分类变量。例如:

chr1 3223 1
chr1 3200 2
chr1 3100  1
chr1 1000 2
chr2 1000 1
chr1 3210 3

我想用某些约束对这些数据进行聚类(因此,这不再是通常的“聚类”),这样,对于每个染色体,其中的位点,比如说±30位置在一起,约束是它们应该具有唯一的标签。

例如,预期的输出将是:

chr1 : 3223(1) 3200(2) 3210(3)请注意站点之类chr1 3100 1的不是“集群”的一部分。

一种方法是简单地计算所有此类站点之间的成对差异,并在处理唯一标签的情况下扩展集群。

有没有更优雅的方法来解决这些问题?

1个回答

在我的知识中,每个聚类算法都是基于距离,计算为成对差异所以我不确定是否容易找到更优雅的通用方法

在您的情况下,您可以计算距离,然后根据您的约束覆盖它。

这里有一个简单的例子,用距离阈值 30 简化为一个数值维度。

 nlst <- c(1,3,5, 36,39,42, 1001,1003,1005, 1036,1039,1042)

 d <- dist(nlst, method="euclidean")
 dr <- as.dist(ifelse(as.matrix(d) > 30, NA, 0))


     1  2  3  4  5  6  7  8  9 10 11
 2   0                              
 3   0  0                           
 4  NA NA NA                        
 5  NA NA NA  0                     
 6  NA NA NA  0  0                  
 7  NA NA NA NA NA NA               
 8  NA NA NA NA NA NA  0            
 9  NA NA NA NA NA NA  0  0         
 10 NA NA NA NA NA NA NA NA NA      
 11 NA NA NA NA NA NA NA NA NA  0   
 12 NA NA NA NA NA NA NA NA NA  0  0 

扫描收集距离为零的点将给出结果聚类。

如果您的约束是局部的(即仅取决于您计算距离的两个点),这应该总是可行的。