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.