Алгоритм кластеризации с требованием верхней границы для каждого размера кластера - PullRequest
0 голосов
/ 23 июня 2011

Мне нужно разделить примерно 50000 точек на отдельные кластеры.Существует одно требование: размер каждого кластера не может превышать K. Существует ли какой-либо алгоритм кластеризации, который может выполнить эту работу?

Обратите внимание, что верхняя граница K каждого кластера одинакова, скажем, 100.

Ответы [ 3 ]

2 голосов
/ 23 июня 2011

Большинство алгоритмов кластеризации можно использовать для создания дерева, в котором самый низкий уровень представляет собой просто один элемент - либо потому, что они естественным образом работают «снизу вверх», объединяя пары элементов, а затем группы соединяемых элементов, либо потому, что - как 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;
}
1 голос
/ 23 июня 2011

Одним из способов является использование иерархического K-средства , но вы продолжаете разбивать каждый кластер, который больше K, пока все они не станут меньше.

Другой (в некотором смысле противоположныйподход) будет использовать иерархическая агломерационная кластеризация , то есть подход снизу вверх и снова убедитесь, что вы не объединяете кластер, если они сформируют новый размер> K.

0 голосов
/ 23 июня 2011

Проблема с наивной кластеризацией заключается в том, что вам действительно нужно вычислить матрицу расстояний, которая содержит расстояние A от каждого другого члена в наборе.Это зависит от того, предварительно ли вы обработали совокупность или объединили кластеры в типичных людей, а затем снова пересчитали матрицу расстояний.

...