Проблема в том, что они попытаются вычислить полную 2D-матрицу расстояний (примерно 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 миллиона в вашей системе.
Ваши очки в 2d, 3d, 10d, 128d? – denis
@Denis Я не понимаю, что вы подразумеваете под этим. AS, такое ограничение, по-видимому, связано с тем, что матрица расстояний nxn для объектов 1M не может быть помещена в память, и каждая из библиотек кластеризации, о которых я говорил выше (оранжевый и scipy), принимает матрицу расстояний в памяти в качестве входных данных (что не является возможно предоставить в качестве входных данных для объектов 1M ...) – user940154
точки/объекты - это простые текстовые файлы, которые я пытаюсь скопировать на основе текста, который они содержат .... можете ли вы также объяснить мне, является ли это 2d или что? Благодарю. – user940154