问题标签 [dbscan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2722 浏览

r - 集群分配有时在两个 DBSCAN 实现中不同

我已经在 R 中实现了 DBSCAN 算法,并且我将集群分配与fpc 库的 DBSCAN 实现相匹配。对 fpc 库 dbscan 示例中给出的合成数据进行测试:

使用以下参数进行聚类:

我正在将 的集群分配fpc::dbscan与我的dbscan. 运行的最大值显示每个点都被两种实现方式相同地分类。

但是在某些情况下,在我的实现中,与 fpc 实现中不同的集群分配了 1 或 2 个点,少数情况下 5 或 6 个点被分配给不同的集群。我注意到只有边界点分类不同。在绘制之后,我看到集群成员在实现中不匹配的点处于这样的位置,这样它就可以分配给它周围的任何集群,这取决于它首先是从哪个集群的种子点被发现的。

我正在显示一个 150 点的图像(以避免混乱),其中 1 点分类不同。请注意,在我的实现中,失配点簇数总是大于 fpc 实现。

聚类图。

顶部插图是 fpc::dbscan,底部插图是我的 dbscan 实现

聚类图。 顶部插图是 fpc::dbscan,底部插图是我的 dbscan 实现

注意我的实现中的不同点标有感叹号(!)我还上传了不匹配部分的缩放图像:


我的 dbscan 实现输出

+是核心点

o是边界点

-是噪声点

!突出不同点

我的 dbscan 实现


fpc::dbscan 实现输出

三角形是核心点 彩色圆圈是边界点 黑色圆圈是噪声点 在此处输入图像描述


另一个例子:

我的 dbscan 实现输出

在此处输入图像描述


fpc::dbscan 实现输出

在此处输入图像描述


编辑

等 xy 缩放示例

根据 Anony-Mousse 的要求

在不同的情况下,有时我的实现似乎正确分类了不匹配点,有时 fpc 实现似乎正确分类了不匹配点。见下文:

fpc::dbscan (带有三角形图)似乎正确分类了不匹配点

在此处输入图像描述

我的 dbscan 实现(带有 + 绘图)似乎正确分类了不匹配点

在此处输入图像描述

问题

  • 我是聚类分析的新手,因此我有另一个问题:这些类型的差异是否允许?

  • 在我的实现中,我从提供的第一个点扫描到最后一个点,并且fpc::dbscan这些点也以相同的顺序扫描。在这种情况下,两个实现都应该!从同一个集群中心发现失配点(用 标记)。此外,我还生成了一些fpc::dbscan将点标记为噪声的情况,但我的实现将其分配给了一些集群。在这种情况下,为什么会出现这种差异?

应要求提供代码段。

0 投票
1 回答
1650 浏览

data-mining - 如何将 DBSCAN 算法应用于相似 url 的分组

如何使用 DBSCAN 算法对相似的 url 进行分组。我见过很多数据集,但没有一个在 url 上,我想采用类似类型的 url 并将其组合在一起。在这里,我无法知道距离(eps),而 minpoints 可以是要分组的 url 的数量。

0 投票
1 回答
1621 浏览

data-mining - DBSCAN 可以应用于聚类字符串吗?如果可以,怎么做?

可能重复:
如何将 DBSCAN 算法应用于相似 url 的分组

我被告知在我的期末 sem 中做一个项目,因为该项目涉及使用 DBSCAN 对相似的字符串进行聚类。我想知道这可以使用 DBSCAN 来完成,如果是,那么我该如何实现。

0 投票
2 回答
867 浏览

python - 在 Cypher / Python 中为 neo4j 优化 DBSCAN

嗨,我一直在尝试为 Neo4j 实现 DBSCAN 算法,但遇到了严重的性能瓶颈。我将描述实现,然后寻求帮助。

我对可能的 epsilon 值进行了离散化,并将每个节点的每个离散化下的邻居数计数,以便能够在一个查询中检索所有核心节点。

这部分很快,不快的部分是后续查询:

然后我选择一个核心节点开始,只要还有核心节点邻居,运行上面的查询来标记他们的邻居。

我认为问题在于我的图具有非常不同的稀疏度 - 从只有弱相似性开始,它几乎是完全连接的,在 ~10k 节点之间有 ~50M 关系,而在强相似性时,~10k 之间的关系只有 ~20k节点(或更少)。无论如何,它总是真的很慢。我处理这个问题的最佳方法是什么?是否对关系类型和起始节点进行索引?我还没有找到关于这个问题的任何资源,而且令人惊讶的是还没有实现,因为这是一个非常标准的图形算法。我可以使用 scikit.learn 但我将仅限于内存中的距离矩阵:(

0 投票
6 回答
67870 浏览

r - 为 DBSCAN (R) 选择 eps 和 minpts?

我一直在寻找这个问题的答案很长一段时间,所以我希望有人能帮助我。我正在使用 R 中 fpc 库中的 dbscan。例如,我正在查看 USArrests 数据集并在其上使用 dbscan,如下所示:

在这种情况下,选择 eps 只是通过反复试验。但是我想知道是否有可用于自动选择最佳 eps/minpts 的函数或代码。我知道有些书建议制作到最近邻居的第 k 个排序距离的图。即,x 轴表示“根据与第 k 个最近邻的距离排序的点”,y 轴表示“第 k 个最近邻距离”。

这种类型的绘图有助于为 eps 和 minpts 选择合适的值。我希望我已经提供了足够的信息来帮助我。我想张贴我的意思的图片,但是我还是个新手,所以还不能张贴图片。

0 投票
2 回答
2064 浏览

cluster-analysis - 适用于非常小的集群的聚类算法

我正在尝试在大约 5000 条记录的列表中查找重复项。每条记录都是一个人的姓名和地址,但都在一个字段中输入不一致,所以我正在尝试一种模糊匹配方法。我的方法(使用rapidminer)是对文本进行一些预处理(即标记化,删除常见和不相关的单词,例如“先生”等),生成TF-IDF并使用DBSCAN对匹配记录进行聚类。这很有效,并给出了很好的结果,但是当我尝试运行完整的数据集时需要很长时间。这也会导致很多只有一个元素的簇,我不知道这会如何影响 DBSCAN 的计算时间。

是否有一种聚类算法可以更快地处理此类数据,或者是否有更好的方法来解决这个问题?

0 投票
2 回答
3282 浏览

cluster-analysis - ELKI implementation of OPTICS clustering algorithm detects only one cluster

I'm having issue with using OPTICS implementation in ELKI environment. I have used the same data for DBSCAN implementation and it worked like a charm. Probably I'm missing something with parameters but I can't figure it out, everything seems to be right.

Data is a simple 300х2 matrix, consists of 3 clusters with 100 points in each.

DBSCAN result:

Clustering result of DBSCAN

MinPts = 10, Eps = 1

OPTICS result:

Clustering result of OPTICS

MinPts = 10

0 投票
1 回答
245 浏览

c - 多少 mxRealloc 可以影响 C-Mex matlab 代码?

这些天来,我一直在研究 C-mex 代码,以提高 DBSCAN matlab 代码的速度。事实上,此刻我在 C-mex 上完成了 DBSCAN。但相反,我的测试数据是 3 x 14414 矩阵,它需要更多时间(matlab 中为 14.64 秒,C-Mex 中为 53.39 秒)。我认为这是由于mxRealloc在我的代码的几个部分中使用了函数。如果有人给我一些建议以获得更好的结果,那就太好了。

这是代码 DBSCAN1.c:

https://www.dropbox.com/sh/mxn757a2qmniy06/PmromUQCbO

0 投票
1 回答
4611 浏览

r - 在 R 中访问 DBSCAN 集群

使用此代码,我可以理解我可以绘制单个集群。

对于上面的代码,我得到以下输出,

我得到了所有 11 个集群。

如果我想在特定集群中显示数据,我需要为此编写什么 R 脚本。

0 投票
1 回答
2249 浏览

cluster-analysis - 根据结果​​选择聚类方法

我在论文中使用 WEKA,并且有超过 1000 行数据。该数据库包括人口统计信息(年龄、位置、状态等),然后是产品名称(值 1 或 0)。最终结果是一个推荐系统。我使用了两种聚类方法,K-MeansDBScan

使用时K-means我尝试了 3 个不同数量的集群,而使用时DBscan我选择了 3 个不同的 epsilon(Epsilon 3 = 48 个集群,忽略了 17% 的数据,Epsilone 2.5 = 19 个集群,而集群 0 包含 229 个项目,忽略了 6%。)意思是我有相同数据的 6 个不同聚类结果。

如何选择最适合我的数据的内容?