ELKI как повысить точность?

Я использую ELKI mini GUI для кластеризации своих точек данных. У меня есть около 1300 точек данных GPS, которые я хотел бы объединить в единицу своими точками GPS (DBSCAN и OPTICS). В качестве входного файла для dbc.in я использую CSV-файл только с 2 столбцами (X,Y). Проблема в том, что мои координаты X,Y (в проекции) очень точны до 6 знаков после запятой. Но после запуска кластерного алгоритма я получаю более низкую точность (до 3 знаков после запятой). Как я могу увеличить точность вывода точек?

А также, когда он генерирует кластеры, он автоматически вызывает некоторые виртуальные идентификаторы, которые не соответствуют моим фактическим идентификаторам точек (ID, X, Y). Однако идентификатор не указывается во входных данных CSV. Он состоит только из двух столбцов (X,Y).

1 ответ

ELKI опирается на double для представления чисел. Если вам нужна более высокая точность, вам придется реализовать свой собственный модуль синтаксического анализа и вывода (хотя это легко, поскольку у нас высокомодульная архитектура).

Сериализация вывода по умолчанию в текст обрабатывается Java. Поэтому точность - это то, что вы получаете от Java по умолчанию. Это должно быть 15-16 цифр точности, если вы используете DoubleVectorи 7-8 цифр, если вы используете FloatVector,

Быстрая проверка с groovysh:

new DoubleVector([12345.678901234567890, 3456.109453] as double[]);
===> 12345.678901234567 3456.109453
new FloatVector([12345.678901234567890, 3456.109453] as float[]);
===> 12345.679 3456.1094

дает только ожидаемую потерю от double а также float точность.

Лучший способ получить метки строк - это добавить метки строк к вашим данным.

Wrt. на ваш дополнительный вопрос в комментариях: Парсер по умолчанию будет обрабатывать текстовую строку в начале вашего файла как метки столбца. Так что просто поместите "X Y" в первую строку вашего файла.

Поэтому разумный формат ввода будет:

X Y Label
1 2 Point7
3 4 "Point 8"

Следующие не очень хорошие идеи:

5 6 123shouldwork
7 8 don't do this: 3 parser will retain the 3

label должен быть не числовым, чтобы синтаксический анализатор автоматически рассматривал его как метку. В противном случае вы должны установить соответствующий параметр.

DBID предназначены для внутренней обработки. Может быть, мы не должны писать их на выходе вообще. FixedDBIDFilter хакерский обходной путь; он предназначен для получения воспроизводимого хеширования при использовании алгоритмов, которые требуют хеширования на основе идентификаторов и выполнения нескольких запусков в MiniGUI. Потому что при многократных запусках DBID будут постоянно перечисляться.

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