代码之家  ›  专栏  ›  技术社区  ›  yk4ever

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

  •  3
  • yk4ever  · 技术社区  · 14 年前

    我有一个加权物品的有序列表,每个物品的重量小于或等于N。 我需要把它转换成一个集群列表。

    有没有一种算法可以做到这一点,同时最大限度地减少聚类总数,并保持其权重尽可能均匀?

    例如,列表[(a,5),(b,1),(c,2),(d,5)],N=6应转换为[([a],5),([b,c],3),([d],5)]

    2 回复  |  直到 14 年前
        1
  •  2
  •   user382751    14 年前

    http://en.wikipedia.org/wiki/Word_wrap )使不良分数之和最小化。badness函数将允许您在最小化集群数量(较大的常量项)和平衡集群数量(偏离平均项目数的惩罚较大)之间进行权衡。

        2
  •  1
  •   Tyler McHenry    14 年前

    你的问题没有明确说明。

    问题是您试图优化结果数据的两个不同属性,而这些属性可能相互对立。对于给定的一组数据,可能是最均匀的分布有许多簇,而最小数目的簇具有非常不均匀的分布。

    最均匀分布为[([a],1),([b],1),([c],1),([d],1),([e],1)]

    但最小的团簇数是[([a,b],2),([c,d],2),([e],1)]

    一个算法应该如何知道你想要哪一个(或者它们之间的哪一个聚类)?你得想办法 您愿意接受的集群数量和分布均匀性之间的权衡。

    编辑: 此外,“均匀度”本身并不是一个明确的概念。您是否希望最大限度地减少聚类间的绝对权重差异,或权重的平均差异,或权重的中位数差异,或权重的标准差?