DBSCAN:可变簇大小

DBSCAN: variable cluster size

重新发布,因为我之前没有添加我的数据;

我已经 运行 一个项目的 R 上的 DBSCAN 算法,我正在根据他们所在的位置创建个人集群。

我需要 3 人的集群 (k=3),每个人都匹配每个人的位置,我的 eps 值为 1.2

我的算法面临的问题是 cohorts/clusters 的大小可变。

这是我在 运行 聚类代码后的输出,如您所见,聚类 #2 中有 5 个变量,我想将其拆分为 3 + 2(因此,聚类编号3 将有 3 个点,簇号 4 将有 2 个点)

DBSCAN clustering for 10 objects.
Parameters: eps = 1.2, minPts = 3
The clustering contains 2 cluster(s) and 2 noise points.

0 1 2 
2 3 5 

我有什么可行的方法来拆分这些大集群中的每一个?

示例数据在这里;


              id        long         lat
 [1,] -2.10229619  1.01270296  0.50710753
 [2,] -0.96591987  1.28347407  0.30814912
 [3,] -0.39773171  0.71560717  1.09179544
 [4,] -0.20833566  1.05423809 -1.21860434
 [5,] -0.01893961 -0.27834265 -1.85409180
 [6,]  0.17045645 -0.08790463 -0.69261331
 [7,]  0.54924855 -0.80977566  0.33080001
 [8,]  0.73864461 -0.54869120 -0.08154845
 [9,]  0.92804066 -0.49214358  1.37150115
[10,]  1.30683277 -1.84916458  0.23750465

我会为此使用整数规划。

设置距离限制。枚举距离低于限制的所有对。将这些扩展到所有三元组,其中三个成对距离中的每一个都在限制之下。

为每个三元组和每个对制定一个整数程序,其中包含一个 0-1 变量。 pair/triple 的分数是成对距离的总和。 objective 是为了最小化所选择的三元组和对的分数之和。对于每个点,我们将包含它的三元组和对的总和限制为等于 1。我们还将对的数量限制为最多两个。

对于对 {1, 2}, {1, 3}, {2, 3}, {2, 4}, {3, 4}, {4, 5} 和三元组 {1, 2, 3}, {2, 3, 4},程序如下所示:

minimize score({1, 2, 3}) x_{1,2,3} + score({2, 3, 4}) x_{2,3,4} +
score({1,2}) x_{1,2} + score({1,3}) x_{1,3} + ... + score({4,5}) x_{4,5}

subject to
x_{1,2} + x_{1,3} + x_{1,2,3} = 1
x_{1,2} + x_{2,3} + x_{2,4} + x_{1,2,3} + x_{2,3,4} = 1
x_{1,3} + x_{2,3} + x_{3,4} + x_{1,2,3} + x_{2,3,4} = 1
x_{3,4} + x_{4,5} + x_{2,3,4} = 1
x_{4,5} = 1
x_{1,2} + x_{1,3} + ... + x_{4,5} <= 2

binary variables
x_{1,2}, x_{1,3}, ..., x_{4,5}, x_{1,2,3}, x_{2,3,4} in {0, 1}

Rglpk 包提供了对合适的整数程序求解器的访问。