Во-первых, вы должны решить, собираетесь ли вы строить свою иерархию снизу вверх или сверху вниз.
Внизу называется Иерархическая агломерационная кластеризация. Вот простой, хорошо документированный алгоритм: http://nlp.stanford.edu/IR-book/html/htmledition/hierarchical-agglomerative-clustering-1.html.
Распространение алгоритма «снизу вверх» сложно, поскольку каждому распределенному процессу необходим весь набор данных для выбора подходящих кластеров. Ему также нужен список кластеров на его текущем уровне, поэтому он не добавляет точку данных более чем в один кластер на одном уровне.
Построение иерархии сверху вниз называется Разделительная кластеризация . K-означает - это один из вариантов, чтобы решить, как разделить узлы вашей иерархии. В этой статье рассматриваются разделение K-средних и деление главного направления (PDDP) для разделения узлов: http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/tm07book.pdf. В конце вам просто нужно разделить каждый родительский узел на относительно хорошо сбалансированные дочерние узлы.
Нисходящий подход легче распространять. После разделения первого узла каждый созданный узел можно отправить в распределенный процесс для повторного разделения и т. Д. Каждый распределенный процесс должен знать только подмножество набора данных, который он разделяет. Только родительский процесс знает полный набор данных.
Кроме того, каждое разделение может выполняться параллельно. Два примера для k-средних: