ELKI如何提高精度?

时间:2014-02-20 09:58:48

标签: dbscan elki optics-algorithm

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

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

1 个答案:

答案 0 :(得分:0)

ELKI依靠double来表示数字。如果你需要更高的精度,你将不得不实现自己的解析器和输出模块(虽然我们有一个高度模块化的架构,但它很容易)。

文本的默认输出序列化由Java处理。因此,精确度是默认情况下从Java获得的。如果您使用的是DoubleVector,则此精度应为15-16位数;如果您使用FloatVector,则精度应为7-8位。

快速检查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精度所需的损失。

获取行标签的最佳方法是...为您的数据添加行标签。

WRT。注释中的附加问题:默认解析器会将文件开头的文本行视为列标签。所以只需将“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

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

DBID用于内部处理。也许我们根本不应该把它们写到输出中。 FixedDBIDFilter是一种愚蠢的解决方法;当使用需要基于id的散列并在MiniGUI中进行多次运行的算法时,它用于获取可重现的散列。因为在多次运行时,将连续枚举DBID。