【问题标题】:Is this the expected behavior of the DBSCAN algorithm (two identical data samples not fitting in the same cluster)?这是 DBSCAN 算法的预期行为(两个相同的数据样本不适合同一个集群)吗?
【发布时间】:2016-09-03 11:53:00
【问题描述】:

请原谅缺少正式条款,我最近才接触 ML。

出于学习目的,我决定尝试 DBSCAN 算法的 Ruby 实现 (https://github.com/matiasinsaurralde/dbscan)。

https://github.com/matiasinsaurralde/dbscan/blob/master/examples/simple.rb 的简单示例的基础上,我创建了一个包含 1000 个数组的数组,每个数组包含两个随机值,“x”和“y”(一个 2d 点),然后我将此数据提供给 DBSCAN 算法(根据需要调整“epsilon”和“最小距离”)。

data_sample = Array.new(1000) { Array.new(2) { rand(100).round } }

dbscan = DBSCAN( data_sample, :epsilon => 3, :min_points => 2, :distance => :euclidean_distance )

然后我将生成的数据(集群和非集群数据)导出到 Excel,以绘制集群和非集群数据的图表。

这是我想出的:

黑点是非聚类数据。

现在我不确定一件事:对于彼此非常接近的一些点,或者共享相同 x 和 y 的点,我看到的是两个点中的一个,而不是让它变得理智另一点的聚类,被归类为非聚类。

看一下第 47、74 点:属于一个簇的点在另一个非簇点的“上方”。这也发生在 14、87、77,64、20,61 和许多其他地方(对于某些点,它们具有相同的 x 和 y)。

现在正如我所说,我仍在处理这个问题,所以有人可以告诉我是否有对我所看到的情况的解释吗?它与 DBSCAN 算法的内部工作原理有关吗?还是更可能是算法的实现中出现了一些错误?还是我做出了一些错误的假设?

我希望这就是您需要知道的全部内容,但如果您需要更多信息,请尽管询问。

【问题讨论】:

  • 与已知良好的实现进行比较,例如 ELKI 中的实现。

标签: arrays ruby machine-learning cluster-analysis dbscan


【解决方案1】:

所以里面其实有两个问题:

  1. 是否有可能两个非常接近的点有不同的标签?特别是“非集群”?

是的,这是可能的,并且直接来自 dbscan 方法,该方法特别要求一个点具有给定数量的近邻,以便被归类为“非集群”以外的任何东西

  1. 是否有可能完全相同相同位置的两个点最终位于两个不同的簇中?

不,这是不可能的。因此,要么这些点不相同(也许您正在比较它们的舍入表示,而不是真实的表示?),或者实现有错误。

【讨论】:

  • 是的,我知道两个接近点可能有两个不同的分类或标签,这就是为什么我还指定我已经调整了 epsilon 和 min-distance 并且这也发生在具有确切特征的点上.关于我要比较的值,数组填充了四舍五入的值,并且 dbscan 和 excel 图表都输入了相同的数据。我只是想确保 DBSCAN 不会发生这种情况并且您确认了它,所以我将尝试另一种实现,然后我可以在这里报告。谢谢。
  • 好吧,看来是实现的原因!这个github.com/shiguodong/dbscan 似乎没有同样的问题,而且速度似乎更快。
  • 第1点的描述不正确。 DBSCAN 不需要标记邻居。
  • @Anony-Mousse 哪里 1 说了什么关于标记的邻居?它只是说为了获得标签,它需要新人
  • 对不起,我可能看错了你的句子。我读到“需要一个点才能将给定数量的近邻归类为......”
【解决方案2】:

DBSCAN 标记点的一些比较明显的属性:

  1. core 点的邻居必须具有与核心点相同的标签(之前已分配到不同集群的边界点除外)
  2. 非核心点的邻居可以有不同的标签,但至少有一个是同一标签的核心点
  3. 噪声点的邻居不能是核心点

数字 2 表示非核心点可以任意靠近并具有不同的标签。

从技术上讲,同一坐标上的两个点甚至有可能具有不同的标签,如果这些点都是边界点。但这可能只会在并行变体中发生,我不知道这实际上会发生在哪里。通常的 DBSCAN 算法会为它们分配相同的标签(在第一次发现时)。

边界点会导致奇怪的异常,这就是作者在 HDBSCAN* 中删除它们的原因。

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2021-09-14
    • 2015-01-03
    相关资源
    最近更新 更多