问题标签 [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.
python - DBSCAN、python的参数eps
我有一套点。它们的几何形状(SRID:4326)存储在数据库中。我得到了一个代码,旨在用 DBSCAN 对这些点进行聚类。参数设置如下:eps=1000,min_points=1。
我获得了距离小于 1000 米的集群。我相信距离小于 1000 米的两个点属于同一个集群。epsilon 真的以米为单位吗?
代码如下:
目的不是找到另一种运行方式,而是真正了解 eps 的价值。它在距离方面代表什么。Min_sample 设置为 1,因为我接受确实拥有 1 个样本大小的集群。
cluster-analysis - 解释 OPTICSxi 聚类的结果
我对检测不同密度区域中的集群感兴趣,例如城市中用户生成的数据,为此我采用了OPTICS算法。
与DBSCAN不同,OPTICS 算法不会产生严格的集群分区,而是对数据库进行增强排序。为了生成集群分区,我使用 OPTICSxi,它是另一种基于 OPTICS 输出生成分类的算法。很少有库能够从 OPTICS 的输出中提取集群分区,ELKI的 OPTICSxi 实现就是其中之一。
我很清楚,如何解释 DBSCAN 的结果(虽然设置“有意义”的全局参数并不容易);DBSCAN 检测集群的“原型”,以密度为特征,表示为每个区域的点数(minpts/epsilon)。OPTICSxi 的结果似乎有点难以解释。
我有时会在 OPTICSxi 的输出中检测到两种现象,但我无法解释。一个是“尖峰”集群的出现,它连接了地图的各个部分。我无法解释它们,因为它们似乎由很少的点组成,而且我不明白算法如何决定将它们分组到同一个集群中。它们真的代表了密度变化的“走廊”吗?查看基础数据,它看起来不像那样。您可以在下图中看到这些“尖峰”。
我无法解释的另一个现象是,有时会出现同一层级的“重叠”集群。OPTICSxi 基于数据库的 OPTICS 排序(例如树状图),该图中没有重复点。
由于这是一个层次聚类,我们认为较低级别的聚类包含较高级别的聚类,并且在构建凸包时强制执行该想法。但是,我认为没有任何理由让集群与同一层次上的其他集群相交,这实际上意味着某些点将具有双重集群“成员资格”。在下图中,我们可以看到一些具有相同层次级别 (0) 的相交集群。
最后,我想留给您的最重要的想法/问题是:我们期望在 OPTICSxi 聚类分类中看到什么?这个问题与参数化 OPTICSxi 的任务密切相关。
由于我几乎没有看到任何针对特定集群问题运行 OPTICSxi 的研究,因此我很难找到最佳的集群分类。即:可以提供一些有意义/有用的结果,并为 DBSCAN 聚类增加一些价值。为了帮助我回答这个问题,我使用不同的参数组合运行了多次 OPTICSxi,我选择了三个,我将在下面讨论。
在这次运行中,我使用了较大的 epsilon (2Km) 值;该值的含义是我们接受大型集群(最大 2Km);由于算法“合并”了集群,我们最终会得到一些非常大的集群,几乎可以肯定它们的密度很低。我喜欢这个输出,因为它暴露了分类的层次结构,它实际上让我想起了使用不同的参数组合(针对不同的密度)运行 DBSCAN,这就是 OPTICS 所宣传的“强度”。如前所述,较小的集群对应于层次尺度中的更高级别和更高的密度。
在这次运行中,我们看到了大量的集群,即使“对比度”参数与上一次运行相同。这主要是因为我选择了较少的 minpts,这表明我们接受了点数较少的集群。由于本例中的 epsilon 较短,因此我们看不到这些大集群占据了地图的很大一部分。我发现这个输出没有前一个有趣,主要是因为,即使我们有一个层次结构,在同一级别也有许多集群,并且其中许多相交。在解释上,我可以看到一个与前一个相似的整体“形状”,但实际上它被离散化为许多容易被忽略为“噪声”的小簇。
本次运行有一个参数选择,与上一次类似,只是minpts更大;结果是,我们不仅发现更少的集群并且它们重叠更少,而且它们大多处于同一水平。
从增加 DBSCAN 价值的角度来看,我会选择第一个参数组合,因为它提供了数据的层次结构图,清楚地显示了哪些区域更密集。恕我直言,最后的参数组合无法提供密度的全球分布的概念,因为它在整个研究区域都发现了类似的集群。我有兴趣阅读其他意见。
performance - 带有 R*-Tree 的 ELKI DBSCAN
我正在尝试使用 ELKI 库实现 DBSCAN 集群测试应用程序。我的数据集是 6 维的,由大约 100.000 个对象组成。
我曾尝试在我的代码中使用 R*-Tree ELKI 优化,但对代码进行基准测试似乎仍然使用 O(n^2)。
这是我在应用程序中使用的代码:
运行上面的代码会导致以下结果:
使用简单的 System.currentTimeMillis() 围绕 dbscan.run(db) 对时间进行基准测试。查看时间列,您可以看到趋势类似于 n^2 而不是 nlog(n),但我无法理解将 ELKI DBSCAN 与 R*-Tree 优化一起使用时缺少什么。
感谢您的任何帮助或建议。
cluster-analysis - rapidminer 和 scikit-learn 中的 DBSCAN 算法
我正在尝试找到一种聚类算法来使用 python 对标称数据进行聚类。为此,我尝试了使用 RapidMiner 的 DBSCAN 算法,它适用于标称数据。但是,当我使用 scikit-learn 提供的 DBSCAN 算法尝试相同的数据集时,它给出的错误是函数无法将字符串转换为浮点数。
rapidminer 和 scikit-learn 中的 DBSCAN 是否不同,我该如何解决这个问题?另外,如果您告诉我另一种适用于标称数据的聚类算法会很棒吗?
python - DBSCAN 绘制非几何数据
我使用sklearn集群算法 dbscan 来获取我的数据集群。 数据:基于十六进制字符串的非几何对象
我使用一个简单的距离来创建一个距离矩阵作为 dbscan 的输入,从而产生预期的集群。
问题是否可以像在演示中一样创建这些集群结果的图
我没有通过搜索找到解决方案。我需要以图形方式展示对象和集群彼此之间的相似性。
由于我将 python 用于所有内容(在该项目中),因此我将不胜感激在 python 中选择解决方案。
machine-learning - scikit-learn:使用 DBSCAN 对文本文档进行聚类
我正在尝试使用 scikit-learn 来聚类文本文档。总的来说,我找到了解决办法,但我在特定问题上遇到了问题。我发现的大多数示例都说明了使用 scikit-learn 和 k-means 作为聚类算法的聚类。在我的设置中采用这些带有 k-means 的示例原则上是可行的。但是,k-means 不适合,因为我不知道集群的数量。从我目前阅读的内容来看——如果需要,请在此处纠正我——DBSCAN 或 MeanShift 似乎更适合我的情况。scikit-learn 网站提供了每个集群算法的示例。现在的问题是,对于 DBSCAN 和 MeanShift,我都会遇到我无法理解的错误,更不用说解决了。
我的最小代码如下:
(我的文档已经被处理过,也就是说,停用词已被删除,并且已经应用了 Porter Stemmer。)
当我运行此代码时,在启动 DBSCAN 并调用时出现以下错误fit()
:
单击dbscan_.py
引发错误的行,我注意到以下行
当我直接在我的代码中使用这些行进行测试时,我得到了同样的错误。我真的不知道np.asarray(X)
这里在做什么,但是在 command 之后X.shape = ()
。因此X.shape[0]
,炸弹——之前,X.shape[0]
正确地指的是文件的数量。出于好奇,我X = np.asarray(X)
从dbscan_.py
. 当我这样做时,某些东西正在大量计算。但几秒钟后,我收到另一个错误:
简而言之,我不知道如何让 DBSCAN 正常工作,或者我可能错过了什么。
design-patterns - 找到一种方法将一组变量与另一个变量 DBSCAN 相关联
我正在寻找一种关于如何将一组变量相对于另一个变量进行转换的方法/方法,以便我可以使用 DBSCAN 算法的值来工作。
我的一组变量称为“兴趣”,其中一个数据可以包含 14 个兴趣中的至少 3 个。我的数据似乎有许多独特的兴趣集,当我尝试将其转换为数字时,“兴趣”中的模式被破坏,从而破坏了集群本身。
如何将数据(兴趣)转换为不会破坏兴趣中的模式的数字形式?
cluster-analysis - DBSCAN 输入说明
DBSCAN算法究竟将什么作为输入?
为什么我weka
在编码算法中有不同的输出?
在编码算法中,它只需要 2 个输入,而在weka
它可能需要 3 个。
有人可以帮我理解算法吗?
python - Python:3 维空间中的 DBSCAN
我一直在寻找用于 3 维点的 DBSCAN 的实现,但运气不佳。有谁知道我的图书馆可以处理这个问题或有这样做的经验吗?我假设 DBSCAN 算法可以处理 3 个维度,通过将 e 值作为半径度量和通过欧几里得分离测量的点之间的距离。如果有人尝试过实现这一点并愿意分享,也将不胜感激,谢谢。
scala - 使用 squaredDistance 的两点之间的 Apache Spark 距离
我有一个向量的 RDD 集合,其中每个向量表示一个点x
和y
坐标。例如,文件如下:
我正在阅读它:
另外,我有一个 epsilon:
对于每个点,我想找到它在 epsilon 距离内的邻居。我愿意:
如何循环所有点并为每个点找到它的邻居?可能使用map
函数?