将有序数据集分组为最少数量的集群

时间:2010-07-28 16:07:56

标签: algorithm list cluster-analysis

我有一个加权项目的有序列表,每个加权项目的权重小于或等于N. 我需要将其转换为集群列表。 每个群集应跨越几个连续项目,群集的总权重必须小于或等于N.

是否有算法可以在最小化群集总数的同时尽可能保持其权重?

E.g。列表[(a,5),(b,1),(c,2),(d,5)],N = 6应转换为[([a],5),([b,c], 3),([d],5)]

2 个答案:

答案 0 :(得分:2)

由于数据集是有序的,一种可能的方法是为每个可能的聚类分配一个“不良”分数,并使用一个动态程序,让人联想到Knuth的自动换行(http://en.wikipedia.org/wiki/Word_wrap),以最大限度地减少不良分数的总和。糟糕函数将让您探索在最小化聚类数量(更大的常数项)和平衡它们之间的权衡(偏离平均项目数的更大惩罚)。

答案 1 :(得分:1)

您的问题未明确。

问题是您正在尝试优化结果数据的两个不同属性,并且这些属性可能彼此相反。对于给定的数据集,可能是最均匀的分布具有许多聚类,并且最小数量的聚类具有非常不均匀的分布。

例如,考虑:[(a,1),(b,1),(c,1),(d,1),(e,1)],N = 2

最均匀的分布是[([a],1),([b],1),([c],1),([d],1),([e],1)] < / p>

但最小数量的聚类是[([a,b],2),([c,d],2),([e],1)]

算法如何知道您想要哪些算法(或它们之间的哪个群集)?您需要找到一些方法来量化您愿意接受的权衡数量和分布均匀性之间的权衡。

通过创建具有2k + 1个元素的任何集合,并为它们分配所有值N / 2,您可以创建两个可能性之间具有任意大差异的示例。这将导致最小数量的簇为k + 1个簇(k个为2个元素,1个为1),最大和最小簇之间的权重差为N / 2。然后,该组的最均匀分布将是2k + 1个簇,每个1个元素,没有重量差异。

编辑:此外,“均匀度”本身并不是一个定义明确的想法。您是否希望最小化群集之间权重的最大绝对差异,或权重的平均差异,权重的中位数差异或权重的标准差?