arrays - 这是 DBSCAN 算法的预期行为吗(两个相同的数据样本不适契约(Contract)一簇)?

标签 arrays ruby machine-learning cluster-analysis dbscan

请原谅缺少正式术语,我最近才接触 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,以绘制聚类和非聚类数据的图表。

这是我想到的:

enter image description here 黑点是非聚类数据。

现在有一件事我不确定:对于某些彼此非常接近的点,或者共享相同的 x 和 y 的点,我看到的是两个点之一,而不是使其成为理智的点另一个点的簇,被归类为非簇。

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

现在正如我所说,我仍在接近这一点,所以有人可以告诉我是否对我所看到的有解释吗?这与 DBSCAN 算法的内部工作原理有关吗?或者说更有可能是算法的实现过程中出现了一些错误?或者我做出了一些错误的假设?

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

最佳答案

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

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

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

  • 是否有可能完全相同位置的两个点最终出现在两个不同的簇中?
  • 不,这是不可能的。因此,要么这些点不相同(也许您正在比较它们的舍入表示,而不是真实的?),要么实现有错误。

    关于arrays - 这是 DBSCAN 算法的预期行为吗(两个相同的数据样本不适契约(Contract)一簇)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37105720/

    相关文章:

    php - MYSQL 请求是否应该分组

    ruby-on-rails - 如何从 ruby​​ 中的 xml 中删除数据类型信息?

    machine-learning - 需要自组织映射中 U 矩阵的具体示例

    machine-learning - 根据相似度对图像进行聚类

    machine-learning - 深度学习中的训练损失和验证损失

    python - 将数组轴滚动不同维度的量(概括跨步索引滚动)

    Javascript - 多次循环同一数组

    java - 在二维数组中输入和存储字符串

    ruby - 将数字添加到它所在的相应索引

    ruby-on-rails - 始终向 searchkick 查询添加默认的 where 子句