具有每个聚类大小的上限要求的聚类算法
Clustering algorithm with upper bound requirement for each cluster size
我需要将大约50000个点划分为不同的簇。有一个要求:每个集群的大小不能超过K。有什么集群算法可以完成这项工作吗?
请注意,每个簇的上界K是相同的,比如说100。
大多数聚类算法都可以用来创建一个树,其中最低级别只有一个元素-要么是因为它们通过连接成对的元素,然后连接成组的元素来自然地"自下而上"工作,要么是因为像K-Means一样,它们可以用来重复地将组拆分成更小的组。
一旦你有了一棵树,你就可以决定在哪里拆分子树,形成大小<=修剪现有的树通常很容易。假设您想划分一个现有的树,以最小化您创建的集群的一些成本之和。你可能有:
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;
}
一种方法是使用分层K-means,但您可以不断拆分每个大于K的集群,直到所有集群都变小。
另一种(在某种意义上相反的方法)是使用分层聚集聚类,即自下而上的方法,如果它们将形成一个大小>K的新聚类,则再次确保不会合并聚类。
天真聚类的问题是,您确实必须计算一个距离矩阵,该矩阵保持a与集合中其他成员的距离。这取决于你是对种群进行了预处理,还是将集群合并为典型的个体,然后再次重新计算距离矩阵。
相关文章:
- K 均值聚类 R 树提升
- C++中的聚类示例
- 两个数组之间的数据聚类和比较
- TSP 的聚类分析算法
- 如何使用opencv c++的聚类来根据面积和高度对连接的组件进行分类
- 用于聚集层次聚类的OpenCV机器学习库
- K 表示视频所有帧的直方图聚类
- OpenCV 聚类袋的单词 k 表示
- 用自适应MeanShift对特征空间-SURF描述符进行聚类
- 在std::list中合并(将两个项目融合在一起,用融合替换)项目的算法(即破坏性聚类)
- 使用OpenCV的Kmeans聚类中的mahalanobis距离
- (C++)K-Means聚类问题
- 使用Kmean找到具有最高数量元素的聚类
- 利用反演距离进行K-means聚类
- 从给定的点云数据中提取一组特征和聚类数据
- 逻辑错误:平均质心计算不正确,无限执行,'entries '函数 - K 表示一组点的聚类,以C++为单位
- c++: k均值聚类g矩阵
- 改进的k -均值聚类(Ward准则)速度提高
- 基于Flann openv的分层聚类
- 具有每个聚类大小的上限要求的聚类算法