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 包提供了对合适的整数程序求解器的访问。
重新发布,因为我之前没有添加我的数据;
我已经 运行 一个项目的 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 包提供了对合适的整数程序求解器的访问。