【发布时间】:2012-06-07 07:31:49
【问题描述】:
我已经在 R 中实现了 DBSCAN 算法,并且我将集群分配与fpc library 的 DBSCAN 实现相匹配。测试是在 fpc 库 dbscan 示例中生成的合成数据上完成的:
n <- 600
x <- cbind(runif(10, 0, 10)+rnorm(n, sd=0.2), runif(10, 0, 10)+rnorm(n, sd=0.3))
使用以下参数进行聚类:
eps = 0.2
MinPts = 5
我正在将 fpc::dbscan 的集群分配与我的 dbscan 实现进行比较。运行的最大值显示每个点都被两种实现进行了相同的分类。
但在某些情况下,我的实现中的 1 或 2 点以及极少数情况下 5 或 6 点被分配给不同的集群,而不是 fpc 实现中的集群。我注意到只有边界点分类不同。在绘制之后,我发现集群成员在实现中不匹配的点处于这样的位置,这样它就可以分配给它周围的任何集群,这取决于它首先是从哪个集群的种子点被发现的。
我正在展示一张有 150 个点的图像(以避免混乱),其中 1 个点的分类不同。请注意,在我的实现中,失配点簇数总是大于 fpc 实现。
聚类图。
顶部插图是 fpc::dbscan,底部插图是我的 dbscan 实现
注意我的实现中的不同点用感叹号(!) 我还上传了不匹配部分的放大图像:
我的 dbscan 实现输出
+是核心点
o 是边界点
- 是噪声点
! 突出不同点
fpc::dbscan 实现输出
三角形是核心点 彩色圆圈是边界点 黑圈是噪声点
另一个例子:
我的 dbscan 实现输出
fpc::dbscan 实现输出
编辑
x-y 等比例缩放示例
根据 Anony-Mousse 的要求
在不同的情况下,有时我的实现似乎正确分类了不匹配点,有时 fpc 实现似乎正确分类了不匹配点。见下文:
fpc::dbscan(带有三角形图)似乎正确分类了不匹配点
我的 dbscan 实现(带有 + 绘图)似乎正确分类了不匹配点
问题
-
我是聚类分析的新手,因此我还有一个问题:这些类型的差异是否允许?
-
在我的实现中,我从提供的第一个点扫描到最后一个点,同样在
fpc::dbscan中,这些点也以相同的顺序扫描。在这种情况下,两个实现都应该从同一个集群中心发现失配点(标记为!)。我还产生了一些情况,其中fpc::dbscan将一个点标记为噪声,但我的实现将它分配给一些集群。在这种情况下,为什么会出现这种差异?
应要求提供代码段。
【问题讨论】:
-
你能举一个例子,其中 fpc 将一个点标记为不应该的噪声吗?尝试缩放绘图,使 x 和 y 具有相同的比例,这使得距离更直观。
-
我添加了新读数的相等 xy 缩放图像
-
在图中青色旁边似乎还有一个黑色簇。所以左边的两个点可能看起来像噪声点,但实际上是黑色簇的边界点(黑色三角形似乎是核心点)。
-
从顶部开始的图像 6 不明确,因为 fpc 绘图使用黑色来标记集群和噪声。是的,三角形是核心点。在此图像中,请考虑使用正确的图来识别噪声点。
-
DBSCAN 结果应该与点的噪声/边界/核心状态一致,可能仅在边界点的集群分配中有所不同。你有一个边界点变成噪音的例子吗?至于
fpc::dbscan,在我看来它好像覆盖了集群分配,从而保留了最后一个集群中的点?至少我是这样阅读fpc源代码的,但我不是 R 专家。cv[reachables] <- cn对我说“覆盖所有可达点的集群分配”(最终从其他集群中窃取它们)。
标签: r data-mining cluster-analysis dbscan