2015-11-10 4 views
1

Я использую фреймворк ELKI для группировки ряда точек, определяемых их географическими координатами (долгота, широта). Я использую алгоритм DBSCAN.Кластеризация нескольких атрибутов с помощью ELKI

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

Теоретически точки теперь будут определены в трехмерном пространстве (а не в 2D), а расстояние будет представлять собой расстояние от географического расстояния и расстояния.

На практике я пытался сделать это в ELKI, но я вхожу в конкретную проблему. Алгоритмы кластеризации ожидают «базу данных» в качестве входных данных.

Clustering<DBSCANModel> de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(Database database) 

Эта база данных создается из LisParametrization, который, среди прочего, гласит подключение к базе данных:

params.addParameter(
     AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dbc); 

Наконец, соединение с базой данных считывает данные из 2D массива:

Импортируйте существующую матрицу данных (double[rows][cols]) в базу данных ELKI.

DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(array[][]); 

Мой вопрос: есть ли способ заменить этот 2D массив для матрицы * D?

Например, в моем случае я хотел бы использовать 3D-массив для хранения двух географических координат и численного атрибута. Что-то вроде этого:

массив [] [] []

+1

Вы хотите, чтобы 'double [rows] [3]' array, а не 'double [] [] []', очевидно. Три столбца, а не тензоры. 'double [] [] []' не будет матрицей, а тензором *. Это будут строки x столбцов x глубинных фрагментов. Это распространено в сверточном глубоком обучении, когда у вас есть 16x16 пиксельных патчей, для 1000 местоположений вашего входного изображения. –

ответ

2

Если вы хотите, чтобы положить вес на случаях, вы должны переключиться на GeneralizedDBSCAN, а также осуществлять взвешенную CorePredicate.

double[rows][cols] 

в порядке. У вас три столбца: долгота, латентность, вес.

DimensionSelectingLatLngDistanceFunction также может работать с 3D-векторами. Вам просто нужно указать, в какой ширине столбца и в каком столбце хранится долгота.

В качестве альтернативы вы можете создать свой собственный DatabaseConnection. Он мог бы возвращать два отношения: одно является полем 2d векторов, содержащим широту и долготу, второе - отношение 1d, содержащее только веса. Но работа с несколькими отношениями может быть сложной. Вышеуказанный подход более прост в использовании.

Смежные вопросы