c++ - 对每个簇大小具有上限要求的聚类算法

标签 c++ algorithm machine-learning cluster-analysis

我需要将大约 50000 个点划分为不同的集群。有一个要求:每个簇的大小不能超过K。有没有什么聚类算法可以做到这一点?

请注意,每个集群的上限 K 都是相同的,比如 100。

最佳答案

大多数聚类算法都可用于创建树,其中最低级别只是单个元素 - 要么是因为它们通过连接元素对然后连接元素组自然地“自下而上”地工作,或者因为 - 像 K -意味着,它们可用于重复将组分成更小的组。

一旦你有了一棵树,你就可以决定在哪里拆分子树以形成大小 <= 100 的集群。修剪现有的树通常很容易。假设您要划分现有的树以最小化您创建的集群的某些成本的总和。你可能有:

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;
}

关于c++ - 对每个簇大小具有上限要求的聚类算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448608/

相关文章:

machine-learning - 使用深度学习技术的监督学习(文档分类)

c++ - Protobuf : Will set_allocated_* delete the allocated object?

c++ - 如何在 C++ 中将二进制文件附加到二进制文件

c++ - 如何打印 pthread_t

c++ - 最大二分匹配 C++

python - 如何使用 scikit 的 Surprise 进行预测?

c++ - 帮助处理类和派生类

多项选择题计算结果的算法

c++ - 数组中两个数之和的最小差值

python - 如何使用 numpy 数组在 Keras 中设置权重?