Оптимизация DBSCAN для вычислительной работы

Я использую алгоритм DBSCAN в Python для набора данных (смоделирован очень похоже на http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html и загружается как кадр данных pandas), который содержит в общей сложности около 3 миллионов точек данных за 31 день. Кроме того, я выполняю кластеризацию плотности, чтобы находить выбросы на ежедневной основе, поэтому db = DBSCAN(eps=0.3, min_samples=10).fit(data) будет иметь только дневные точки данных для обработки при каждом проходе. Минимальные/максимальные точки, которые у меня есть в любой день, - 15809 и 182416. Я пытался удалить переменные, но процесс останавливается на этапе кластеризации DBSCAN.

  1. В O(n log n) это явно раздувается, независимо от того, где я его запускаю. Я понимаю, что нет возможности заранее указать количество «меток» или кластеров — что еще здесь лучше?

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

  3. Я прочитал эту тему об использовании "предварительной кластеризации навеса" для сжатия ваших данных. как при векторном квантовании перед DBSCAN (обратите внимание, что этот метод одинаково затратен в вычислительном отношении) - могу ли я использовать что-то подобное для предварительной обработки моих данных? Или как насчет "параллельного DBSCAN"?


person ekta    schedule 05.02.2016    source источник


Ответы (1)


Вы решили сделать:

  • разделение, кластеризация по одному дню (или меньше) за раз
  • выборки, разбейте набор данных случайным образом на 10 частей. обрабатывать их индивидуально
person Has QUIT--Anony-Mousse    schedule 06.02.2016
comment
Как бы вы тогда присоединились к этим отдельным разделам? - person gregory; 16.03.2020