ELKI OPTICS предварительно вычисленная матрица расстояний

Я не могу заставить этот алгоритм работать с моим набором данных, поэтому я взял очень маленькое подмножество своих данных и попытался заставить его работать, но это тоже не сработало.

Я хочу ввести предварительно рассчитанную матрицу расстояний в 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 -алгоритм clustering.optics.OPTICSList -algorithm.distancefunction external.FileBasedDoubleDistanceFunction -distance.matrix /Users/jperrie/Documents/testfile.txt -optics.epsonil.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, тогда она работает:

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 или что-то типа того.

Это связано с недавним изменением, которое еще может быть некорректно представлено в документации.

Когда вы выполняете несколько вызовов в MiniGUI, ELKI назначает новые DBID объекта. Таким образом, если у вас есть набор данных со 100 объектами, первый прогон будет использовать 0-99, второй 100-199, третий 200-299 и т. Д. - это может быть желательно (если вы думаете о более длительных процессах, вам нужны идентификаторы объектов быть уникальным), но это также может быть удивительным поведением.

Тем не менее, это делает предварительно вычисленные матрицы расстояний действительно сложными в использовании; в частности с реальными данными. Поэтому эти классы были изменены для использования смещений. Таким образом, формат матрицы расстояний теперь

DBIDoffset1 DBIDoffset2 distance

где смещение 0 = начало + 0 - первый объект.

Когда я вернусь в офис (и не забуду), я 1. обновлю документацию, чтобы отразить это, предоставлю 2. параметр смещения, чтобы вы могли продолжить подсчет, начиная с 1, 3. сделать расстояние по умолчанию "NaN"или" бесконечность ", и 4. добавить проверку исправности, которая предупреждает, если у вас есть 100 объектов, но расстояния даны для объектов 1-100 вместо 0-99.

Другие вопросы по тегам