2

我似乎无法让这个算法在我的数据集上工作,所以我取了我的数据的一个非常小的子集并试图让它工作,但这也不起作用。

我想将一个预先计算好的距离矩阵输入到 ELKI 中,然后让它找到我的点的可达距离列表,但是我的所有点的可达距离都为 0。

ID=1 reachdist=Infinity predecessor=1
ID=2 reachdist=0.0 predecessor=1
ID=4 reachdist=0.0 predecessor=1
ID=3 reachdist=0.0 predecessor=1

我的 ELKI 论点如下:

运行:-dbc DBIDRangeDatabaseConnection -idgen.start 1 -idgen.count 4 -algorithm clustering.optics.OPTICSList -algorithm.distancefunction external.FileBasedDoubleDistanceFunction -distance.matrix /Users/jperrie/Documents/testfile.txt -optics.epsilon 1.0 -optics .minpts 2 -resulthandler ResultWriter -out /Applications/elki-0.7.0/elkioutputtest

我使用 DBIDRangeDatabaseConnection 而不是输入文件来创建索引 1 到 4 并传入具有以下格式的距离矩阵,其中每行有 2 个索引和一个距离。

1 2 0.0895585119724274
1 3 0.19458931684494
2 3 0.196315720677376
1 4 0.137940123677254
2 4 0.135852232575417
3 4 0.141511023044586

任何指向我哪里出错的指针都将不胜感激。

4

2 回答 2

2

当我将距离矩阵更改为从 0 开始计数时,它似乎可以工作:

ID=0 reachdist=Infinity predecessor=-2147483648
ID=1 reachdist=0.0895585119724274 predecessor=-2147483648
ID=3 reachdist=0.135852232575417 predecessor=1
ID=2 reachdist=0.141511023044586 predecessor=3

也许你应该提交一份错误报告——对我来说,这似乎是一个错误。此外,predecessor=-2147483648可能应该是predecessor=None或类似的东西。

于 2016-01-05T18:55:32.393 回答
2

这是由于最近的更改,可能尚未在文档中正确显示。

当您在 MiniGUI 中进行多次调用时,ELKI 将分配新的对象 DBID。因此,如果您有一个包含 100 个对象的数据集,第一次运行将使用 0-99,第二次运行将使用 0-99,第二次运行使用 100-199,第三次运行使用 200-299 等等 - 这可能是理想的(如果您考虑运行更长的进程,则需要对象 ID是独一无二的),但它也可能是令人惊讶的行为。

然而,这使得预先计算的距离矩阵很难使用;尤其是真实数据。因此,这些类被更改为使用offsets。所以现在距离矩阵的格式是

DBIDoffset1 DBIDoffset2 distance

其中 offset 0 = start + 0 是第一个对象。

当我回到办公室时(不要忘记),我将 1. 更新文档以反映这一点,提供 2. 偏移参数,以便您可以从 1 开始继续计数, 3. 将默认距离设为“NaN ” 或“无穷大”,以及 4. 添加一个健全性检查,如果您有 100 个对象,则会发出警告,但对象的距离是 1-100 而不是 0-99。

于 2016-01-05T20:00:31.350 回答