0

我正在使用 ELKI mini GUI 对我的数据点进行聚类。我有大约 1300 个 GPS 数据点,我想对我的 GPS 点(DBSCAN 和 OPTICS)进行聚类。作为 dbc.in 的输入文件,我使用只有 2 列(X,Y)的 csv 文件。问题是,我的 X,Y(投影)坐标非常精确,精确到小数点后 6 位。但是在运行集群算法之后,我的精度越来越低(最多小数点后 3 位)。如何提高输出点的精度?

而且在生成集群时,它会自动调用一些与我的实际点 ID(ID、X、Y)不对应的虚拟 ID。但是,输入 csv 中没有给出 ID。它仅包含两列 (X,Y)。

4

1 回答 1

0

ELKI依赖于double表示数字。如果您需要更高的精度,则必须实现自己的解析器和输出模块(虽然这很容易,因为我们有一个高度模块化的架构)。

文本的默认输出序列化由 Java 处理。因此,精度是您默认从 Java 获得的。这应该是 15-16 位的精度,如果您使用的是 ,则应该是DoubleVector7-8 位,如果您使用的是FloatVector.

使用 groovysh 快速检查:

new DoubleVector([12345.678901234567890, 3456.109453] as double[]);
===> 12345.678901234567 3456.109453
new FloatVector([12345.678901234567890, 3456.109453] as float[]);
===> 12345.679 3456.1094

只产生预期的损失doublefloat精度。

获取行标签的最佳方法是……将行标签添加到您的数据中。

写。评论中的附加问题:默认解析器会将文件开头的文本行视为列标签。所以只需将“X Y”放入文件的第一行。

因此,一个合理的输入格式将是:

X Y Label
1 2 Point7
3 4 "Point 8"

以下是不太好的想法:

5 6 123shouldwork
7 8 don't do this: 3 parser will retain the 3

label 应该是非数字的,以便解析器自动将其视为标签。否则,您必须设置适当的参数。

DBID 用于内部处理。也许我们根本不应该将它们写入输出。FixedDBIDFilter是一种骇人听闻的解决方法;它旨在用于在使用需要基于 id 的哈希算法并在 MiniGUI 中进行多次运行时获得可重现的哈希值。因为在多次运行时,DBID 将被不断枚举。

于 2014-02-24T08:47:18.083 回答