在dbscan结果中查找k个最大的簇

问题描述 投票:0回答:1

我有一个数据框df,由两列组成:xy坐标。每行都指向一个点。我将其输入dbscan函数以获得df中点的聚类。

library("fpc")
db = fpc::dbscan(df, eps = 0.08, MinPts = 4)
plot(db, df, main = "DBSCAN", frame = FALSE)

通过使用print(db),我可以看到dbscan返回的结果。

> print(db)
dbscan Pts=13131 MinPts=4 eps=0.08
         0    1    2  3  4   5  6 7  8  9 10 11 12 13 14 15 16 17 18 19 20 21
border 401   38   55  5  2   3  0 0  0  8  0  6  1  3  1  3  3  2  1  2  4  3
seed     0 2634 8186 35 24 561 99 7 22 26  5 75 17  9  9 54  1  2 74 21  3 15
total  401 2672 8241 40 26 564 99 7 22 34  5 81 18 12 10 57  4  4 75 23  7 18
       22 23 24 25 26 27 28  29 30 31 32 33  34 35 36 37 38 39 40 41 42 43 44
border  4  1  2  6  2  1  3   7  2  1  2  3  11  1  3  1  3  2  5  5  1  4  3
seed   14  9  4 48  2  4 38 111  5 11  5 14 111  6  1  5  1  8  3 15 10 15  6
total  18 10  6 54  4  5 41 118  7 12  7 17 122  7  4  6  4 10  8 20 11 19  9
       45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
border  2  4  2  1  3  2  1  1  3  1  0  2  2  3  0  3  3  3  3  0  0  2  3  1
seed   15  2  9 11  4  8 12  4  6  8  7  7  3  3  4  3  3  4  2  9  4  2  1  4
total  17  6 11 12  7 10 13  5  9  9  7  9  5  6  4  6  6  7  5  9  4  4  4  5
       69 70 71
border  3  3  3
seed    1  1  1
total   4  4  4

从上面的总结中,我可以看到聚类2由8186个种子点(核心点)组成,聚类1由2634个种子点组成,聚类5由561个点组成。

我定义了最大的簇,因为其中包含最大数量的种子点。因此,在这种情况下,最大的群集是群集2。第一,第二,第三最大群集是2、1、5。

它们是直接返回最大簇或k个最大簇中的行(点)的直接方法吗?]

我可以间接地做到这一点。

  1. 我可以通过db $ cluster。
  2. 因此,我可以使用db $ cluster
  3. 创建一个新的数据框df2除了原始x列和y之外的新附加列列。
  4. 然后,我可以根据中的簇号聚合df2
  5. 第三列,找到每个聚类中的点数。
  6. [之后,我可以找到k个最大的组,分别是2、1、5再次。
  7. 最后,我可以选择df2
  8. 中的第三列值等于2的行以返回最大聚类中的点。

    但是以上方法重新计算了许多已知结果,如print(db)

的摘要所述。

我有一个数据框df,由2列组成:x和y坐标。每行都指向一个点。我将其输入dbscan函数以获取df中点的聚类。 library(“ fpc”)db = fpc :: ...

r dbscan
1个回答
1
投票

dbscan功能似乎没有保留数据。

© www.soinside.com 2019 - 2024. All rights reserved.