Запустить DBSCAN по траекториям - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь запустить DBSCAN (sklearn.cluster) для набора данных траекторий.Набор данных - это массив массивов (траекторий) массивов (точек)

dataset_test =

array([[[46.37017059, 30.954216  ],
    [46.39661026, 30.94524956],
    [46.46545792, 30.94379807],
    [46.47494888, 30.94352913],
    [46.53890991, 30.94241714],
    [46.54576111, 30.95412064]],

   [[46.3741684 , 30.96355057],
    [46.40998077, 30.94839096],
    [46.43452072, 30.94845963],
    [46.47270966, 30.94708061],
    [46.48934174, 30.94626999],
    [46.5067749 , 30.94859695]],

   [[46.02920151, 31.13430023],
    [46.08929825, 31.13030052],
    [46.21580124, 31.04080009],
    [46.3125    , 30.96290016],
    [46.40140152, 30.95050049],
    [46.47000122, 30.94930077]],

   ...,

   [[44.21621323, 36.12607193],
    [44.35692596, 37.2990303 ],
    [44.42433167, 37.44826889],
    [44.47311783, 37.58980179],
    [44.50473022, 37.72211075],
    [44.52869034, 37.83360672]],

   [[41.54032898, 31.87997246],
    [41.60663986, 31.83249092],
    [41.63148117, 31.81200027],
    [41.67761993, 31.77362061],
    [41.69719315, 31.75731087],
    [41.7834549 , 31.68216133]],

   [[46.3062439 , 30.72232246],
    [46.298069  , 30.74869919],
    [46.28075409, 30.79483032],
    [46.2546196 , 30.86957932],
    [46.24847794, 30.96400261],
    [46.25270081, 30.97114944]]])

Я определил функцию расстояния.При запуске

from sklearn.cluster import DBSCAN clustering = DBSCAN(eps=3, min_samples=2, metric=hsdf_distance).fit(dataset_test)

я получаю сообщение об ошибке:

ValueError: найден массив с dim 3. Ожидается оценщик <= 2 </p>

Есть идеи?

1 Ответ

0 голосов
/ 23 октября 2018

Возможно, вы сталкиваетесь с ограничениями API sklearn.

Однако, поскольку использование подхода "pyfunc" для пользовательской метрики расстояния в любом случае очень медленное - и не масштабируемое - вы, вероятно, можете просто вместо этого используйте матрицу расстояний .В любом случае, вы не получите большой пользы от индексации.Тогда часто быстрее создать матрицу расстояний NxN и использовать distance="precomputed".

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

В частности, использование предварительно вычисленного расстояния Мари полезно, когда вы еще не знаете значений epsilon и minpts, поскольку вы можете использовать его несколько разраза.

Очевидным недостатком матрицы расстояний является время выполнения O (n²) и требования к памяти, которые обычно можно уменьшить для наборов данных, дружественных к индексу.

...