Я запускаю алгоритм 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 для выполнения вычислений
В
O(n log n)
это явно раздувает вверх, независимо от того, где я запускаю его. Я понимаю, что некорректно указать количество «ярлыков» или кластеров - что еще лучше?Кроме того, с точки зрения оптимизации некоторые из значений этих точек данных будут точными (подумайте об этом как о повторяющихся кластерных точках) - могу ли я использовать эту информацию для обработки данных перед подачей на DBSCAN?
Я прочитал this thread об использовании «препарирования купола», чтобы сжать ваши данные, как в векторном квантовании, перед DBSCAN (обратите внимание, что этот метод одинаково дорогостоящий). Могу ли я использовать что-то похожее на предварительную обработку моих данных? Или как насчет «параллельного DBSCAN»?