2016-02-05 3 views
1

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

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

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

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

ответ

1

Рассматривали ли вы сделать:

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