Проблема, вероятно, заключается в том, что они попытаются вычислить полную двумерную матрицу расстояний (примерно на 8 ГБ с наивысшей точностью), и тогда их алгоритм все равно будет работать в O(n^3)
раз.используя другой алгоритм кластеризации.Иерархическая кластеризация медленная, и результаты обычно не совсем убедительны.В частности, для миллионов объектов, где вы не можете просто посмотреть на дендрограмму, чтобы выбрать подходящий разрез.
Если вы действительно хотите продолжить иерархическую кластеризацию, я верю, что ELKI (Javaхотя) имеет O(n^2)
реализацию SLINK
.Что на 1 миллион объектов должно быть примерно в 1 миллион раз быстрее.Я не знаю, есть ли у них тоже CLINK
.И я не уверен, существует ли на самом деле какой-либо алгоритм sub-O(n^3)
для других вариантов, кроме односвязных и полносвязных.
Рассмотрите возможность использования других алгоритмов.k-означает, например, очень хорошо масштабируется с количеством объектов (обычно это тоже не очень хорошо, если ваши данные не очень чистые и регулярные).DBSCAN
и OPTICS
довольно хороши, на мой взгляд, когда вы почувствуете параметры.Если ваш набор данных является низкоразмерным, их можно довольно быстро ускорить с соответствующей структурой индекса .Затем они должны работать в O(n log n)
, если у вас есть индекс с O(log n)
временем запроса.Что может иметь огромное значение для больших наборов данных.Лично я без проблем использовал OPTICS
для набора данных изображений в 110k, поэтому я могу себе представить, что в вашей системе он увеличится до 1 миллиона.