Большинство алгоритмов кластеризации можно использовать для создания дерева, в котором самый низкий уровень представляет собой просто один элемент - либо потому, что они естественным образом работают «снизу вверх», объединяя пары элементов, а затем группы соединяемых элементов, либо потому, что - как K-Средства, они могут быть использованы для многократного разделения групп на более мелкие группы.
После того, как у вас есть дерево, вы можете решить, где отделить поддеревья, чтобы сформировать кластеры размером <= 100.часто довольно просто.Предположим, что вы хотите разделить существующее дерево, чтобы минимизировать сумму некоторых затрат кластеров, которые вы создаете.Вы можете иметь: </p>
f(tree-node, list_of_clusters)
{
cost = infinity;
if (size of tree below tree-node <= 100)
{
cost = cost_function(stuff below tree-node);
}
temp_list = new List();
cost_children = 0;
for (children of tree_node)
{
cost_children += f(child, temp_list);
}
if (cost_children < cost)
{
list_of_clusters.add_all(temp_list);
return cost_children;
}
list_of_clusters.add(tree_node);
return cost;
}