Как подключить пользовательские расстояния с помощью ELKI?

Я уже прочитал руководство в документации ELKI ( http://elki.dbs.ifi.lmu.de/wiki/Tutorial/DistanceFunctions ).

К сожалению, я не понимаю, как подключить сгенерированный .class к MiniGUI (или скрипту bash для предоставленного .jar). Как это можно сделать?

Ps: Я знаю, что это звучит абсолютно нубски, но когда я пытаюсь "набрать" имя класса, как было предложено, я получаю сообщение об ошибке "Следующие параметры не могут быть обработаны: HammingDistance", например.


person Samuel S.    schedule 16.07.2014    source источник
comment
Попробуйте указать полное имя класса. С именем пакета. Убедитесь, что он находится на вашем пути к классу.   -  person Has QUIT--Anony-Mousse    schedule 17.07.2014


Ответы (1)


ELKI будет загружать классы через стандартный Java Classloader. Следовательно, они должны быть в пути к классам, иначе их нельзя будет загрузить. Пример вызова (при условии, что ваши классы находятся в папке bin):
java -cp elki.jar:bin/ de.lmu.ifi.dbs.elki.application.ELKILauncher

Параметры интерпретируются следующим образом:

  • Если есть класс с таким именем (включая имя пакета!), то он используется.
  • В противном случае ELKI пытается добавить имя пакета ожидаемого интерфейса. Что позволяет использовать ярлыки.
  • В противном случае известные классы (из служебных файлов) проверяются на наличие псевдонимов. Например, Евклидово расстояние имеет псевдоним l2, Манхэттен имеет псевдоним l1.
  • Класс должен иметь конструктор без параметров public или внутренний public static class Parameterizer.

Помощь при вводе построена следующим образом:

  • .jar файлы в пути к классам проверяются на наличие служебных файлов в META-INF/elki/<interface>
  • папки в пути к классам переводят вас в режим разработки, где выполняется рекурсивный список и проверяются все .class файлы. Это намного медленнее, но избавляет от необходимости редактировать служебные файлы. Обнаруженные классы отображаются ниже тех, которые перечислены в файле службы.

Кроме того, пакет de.lmu.ifi.dbs.elki.application.internal включает классы, которые будут проверять все в вашем пути к классам и сообщать, например. классы, у которых нет конструктора public без параметров или внутреннего public static class Parameterizer.

person Erich Schubert    schedule 17.07.2014
comment
Большое спасибо за вашу помощь, Эрих, я смог использовать собственный класс расстояния, который я создал! Двигаемся дальше: есть ли способ получить доступ к данным напрямую с помощью BDID? Я пытаюсь получить данные медоида из BDID, предоставленного методом getMedoid(). - person Samuel S.; 23.07.2014
comment
Может быть несколько отношений (например, векторные данные, метка). Если вам нужны данные, вам нужно сначала получить Relation, который вы хотите получить (т.е. указать, следует ли использовать векторный столбец или столбец меток). - person Erich Schubert; 23.07.2014