问题标签 [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 投票
5 回答
20264 浏览

python - scikit-learn DBSCAN 内存使用情况

更新:最后,我选择用于对大型数据集进行聚类的解决方案是下面 Anony-Mousse 建议的解决方案。也就是说,使用 ELKI 的 DBSCAN 实现我的聚类而不是 scikit-learn 的。它可以从命令行运行,并通过适当的索引,在几个小时内执行此任务。使用 GUI 和小样本数据集来制定您想要使用的选项,然后前往城镇。值得研究。任何人,请继续阅读我最初的问题的描述和一些有趣的讨论。

我有一个包含约 250 万个样本的数据集,每个样本都有 35 个要聚类的特征(浮点值)。我一直在尝试使用 scikit-learn 的 DBSCAN 实现来做到这一点,使用曼哈顿距离度量和从数据中抽取的一些小随机样本估计的 epsilon 值。到现在为止还挺好。(这里是片段,供参考)

我目前的问题是我很容易耗尽内存。(我目前正在使用 16 GB RAM 的机器)

我的问题是,DBSCAN 是否在运行时即时计算成对距离矩阵,这就是吞噬我记忆的原因?(250 万 ^ 2) * 8 字节显然大到愚蠢,我会理解的。我不应该使用这种fit()方法吗?更一般地说,有没有办法解决这个问题,或者我通常在这里吠叫错误的树?

如果答案很明显,请道歉。这几天我一直在纠结这个问题。谢谢!

fit(X)附录:另外,如果有人能更明确地向我解释和之间的区别,fit_predict(X)我也会很感激——恐怕我不太明白。

附录#2:可以肯定的是,我只是在一台有大约 550 GB RAM 的机器上尝试过这个,但它仍然爆炸了,所以我觉得 DBSCAN 可能正在尝试制作一个成对距离矩阵或者我显然不想要的东西去做。我想现在最大的问题是如何阻止这种行为,或者找到其他可能更适合我需要的方法。谢谢你在这里陪我。

附录#3(!):我忘了附上回溯,在这里,

0 投票
1 回答
625 浏览

cluster-analysis - 将簇的 ELKI DBSCAN 凸包写入文件

我已经开始使用 ELKI 进行数据分析,但我似乎无法做的一件看似简单的事情是在运行 DBSCAN 后将计算出的集群凸包输出到文件中。我可以通过可视化 gui 可视化凸包,但无法生成 KML 文件。我还可以将我的聚类结果写入一个文件夹(使用 ResultWriter resulthandler),但是当我设置 KMLOutputHandler 时没有生成文件。我在日志窗口中没有收到错误消息(即使详细参数设置为 true)。

在 ELKI 中生成 KML 文件有技巧吗?任何人都可以完成这样做的步骤吗?

任何帮助,将不胜感激。

(顺便说一句,是否可以使用 ELKI 为 DBSCAN 结果生成 alpha 形状?如果可以,必须调整哪个参数?)

0 投票
1 回答
610 浏览

r - 检索 R 中每个集群中的值

我已经成功运行了 DBSCAN 算法(这里是精简命令):

并绘制了我的集群:

results$cluster返回一个带有数值的列表。每个索引处的值反映了该索引中原始数据所属的集群:

但是,如何检索每个集群中原始数据的值?例如,如何从集群 #2 中的原始数据中获取所有值?

0 投票
1 回答
1661 浏览

algorithm - DBSCAN 算法(递归逻辑)

以上是。如您所见,DBSCAN 的算法根据 Wikipedia。

我想问一下这个确切的部分。

我的理解是,如果访问核心点邻居的核心点,它将加入当前检查的集群,对吗?但是这里的递归是如何发生的呢?因为我们已经定义了循环:

在加入过程之前,因此 expandCluster 函数不会检查来自 NeighborPts' 的任何附加点,如果新的 NeighborPts' 实际上有一个点是同一集群的另一个核心点,那么算法如何进行?

我有一个在 Java 中实现“expandCluster”方法的代码:

通过此代码修改数据收集region后是否会重新访问数据收集region.addAll(v);

0 投票
1 回答
2591 浏览

cluster-analysis - 如何计算聚类中的密度

我正在使用具有 2 个坐标的数据集。目前我正在计算密度,首先计算从每个点到其他点的总距离,然后将其除以总点数。我想知道这是计算密度的正确方法,因为我没有得到想要的结果。

这是集群文件https://dl.dropboxusercontent.com/u/45772222/samp.txt

这个集群应该有3个集群-> 2个椭圆和一个连接它们的管道知道如何将它们分开吗?

0 投票
1 回答
9871 浏览

scikit-learn - 如何在 scikit-learn 中缩放输入 DBSCAN

sklearn.clustering.DBSCAN 的输入是否应该被预处理?

在示例http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#example-cluster-plot-dbscan-py中,输入样本 X 之间的距离被计算并归一化:

在 v0.14 ( http://jaquesgrobler.github.io/online-sklearn-build/auto_examples/cluster/plot_dbscan.html ) 的另一个示例中,完成了一些缩放:

我将我的代码基于后一个示例,并让印象聚类在这种缩放下效果更好。然而,这种缩放“通过去除均值和缩放到单位方差来标准化特征”。我试图找到二维集群。如果我的集群分布在一个正方形区域中 - 比如说 100x100,我认为缩放没有问题。但是,如果它们分布在一个矩形区域中,例如 800x200,则缩放会“挤压”我的样本并在一维中改变它们之间的相对距离。这会恶化聚类,不是吗?还是我理解某事。错误的?我是否需要进行一些预处理,或者我可以简单地输入我的“原始”数据吗?

0 投票
1 回答
761 浏览

dbscan - 如何将 ELKI 用于带有预先计算的距离矩阵的 DBSCAN

我为数据库中的所有点预先计算了距离矩阵。我正在尝试使用以下命令调用 ELKI gui:

但我不断收到以下错误消息:

参数格式错误!参数“dbscan.epsilon”需要距离值,但距离没有设置!

我无法弄清楚我在这里做错了什么......

0 投票
2 回答
22369 浏览

python - Python scikit-learn 中的 DBSCAN:将聚类点保存在数组中

按照 Scikit Learning的 DBSCAN 聚类算法的示例演示,我试图将每个聚类类的 x、y 存储在一个数组中

在此处输入图像描述

在此处输入图像描述

我试图通过 scikit-learn 理解 DBSCAN 的实现,但从这一点开始我遇到了麻烦。簇数为 3(n_clusters_),我希望将每个簇的 x、y 存储在一个数组中

0 投票
1 回答
721 浏览

python - DBSCAN 可能不精确的纬度/经度坐标

我一直在运行 sci-kit learn 的 DBSCAN 实现,以按纬度/经度对一组地理标记照片进行聚类。在大多数情况下,它工作得很好,但我遇到了一些令人费解的例子。例如,有两组照片,用户输入的文本字段指定照片是在中央公园拍摄的,但这些照片的纬度/经度没有聚集在一起。照片本身证实了他们两组观察结果都来自中央公园,但实际上纬度/经度之间的距离比epsilon.

经过一番调查,我发现这是因为纬度/经度地理标签(由手机的 GPS 生成)非常不精确。当我查看每张照片的定位精度时,我发现它们的范围很广(我已经看到了高达 600 米的误差范围),如果考虑到定位精度,这两组照片在以纬度/经度表示的附近距离。

当您进行 DBSCAN 时,有什么方法可以计算 lat/long 的误差范围?

注意:我不确定这个问题是否像它应该的那样清晰,所以如果我能做些什么来使它更清楚,请告诉我。)

0 投票
1 回答
8047 浏览

python - dbscan - 设置最大集群跨度限制

根据我对 DBSCAN 的理解,您可以指定一个 epsilon,例如 100 米,并且 - 因为 DBSCAN 在查找集群时考虑了密度可达性不是 直接密度可达性- 最终得到一个集群,其中最大距离任意两点之间的距离 > 100 米。在更极端的可能性中,您似乎可以将 epsilon 设置为 100 米并最终得到 1 公里的集群: 请参阅 scikit learn 的此图像数组中的 [2][6] 以了解何时发生这种情况的示例. (我非常愿意被告知我是一个彻头彻尾的白痴,如果这就是这里发生的事情,我会误解 DBSCAN。)

是否有像 DBSCAN 这样基于密度的算法,但考虑到集群中任意两点之间的最大距离的某种阈值?