ELKI OPTICS预先计算的距离矩阵

时间:2016-01-05 15:43:54

标签: machine-learning cluster-analysis data-mining elki optics-algorithm

我似乎无法使用此算法处理我的数据集,所以我只使用了一小部分数据并尝试使其工作,但这也无效。

我想在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

任何指向我出错的地方都会受到赞赏。

2 个答案:

答案 0 :(得分: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或类似的东西。

答案 1 :(得分:2)

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

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

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

DBIDoffset1 DBIDoffset2 distance

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

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