Как я могу кластеризовать данные, используя матрицу расстояний с библиотекой ELKI? - PullRequest
3 голосов
/ 04 июня 2019

У меня есть матрица расстояний, и я хочу использовать эту матрицу расстояний при кластеризации своих данных.

Я прочитал документацию ELKI, и там говорится, что я могу перезаписать метод distance при расширении класса AbstractNumberVectorDistanceFunction.

Однако класс distance возвращает координаты. Так от координаты х до координаты у. Это хлопотно, потому что матрица расстояний заполнена только значениями расстояния, и мы используем индексы, чтобы найти значение расстояния от index x до index y. Вот код из документации:

public class TutorialDistanceFunction extends AbstractNumberVectorDistanceFunction {
  @Override
  public double distance(NumberVector o1, NumberVector o2) {
    double dx = o1.doubleValue(0) - o2.doubleValue(0);
    double dy = o1.doubleValue(1) - o2.doubleValue(1);
    return dx * dx + Math.abs(dy);
  }
}

У меня вопрос, как правильно использовать матрицу расстояний при кластеризации с ELKI.

1 Ответ

0 голосов
/ 05 июня 2019

AbstractNumberVectorDistanceFunction - соответствующий родительский класс только , если ваши входные данные являются числовыми векторами. Если ваш тип данных является идентификатором абстрактного объекта, вместо этого используйте подкласс AbstractDBIDRangeDistanceFunction. Затем вы должны реализовать

double distance(int i1, int i2);

Уже существуют различные реализации функции расстояния для предварительно вычисленных расстояний, например, DiskCacheBasedDoubleDistanceFunction, которая отображает в памяти матрицу расстояний, хранящуюся на диске. Мы должны добавить DoubleMatrixDistanceFunction для прямого использования из Java (в следующей версии все имена классов и пакетов будут сокращены, кстати).

См. Также: https://elki -project.github.io / howto / precomputed_distances в частности, раздел «Использование без первичных данных» о том, как настроить базу данных без первичных данных, когда вы используете только матрицу расстояний.

...