在线数据集群的一个实例

时间:2012-07-15 03:15:45

标签: cluster-analysis

我需要从整数输入数组中导出整数簇,以便最大限度地减少簇内的变化。 (阵列中的整数或数据值对应于在城市之间运行的16辆汽车的燃气使用量。最后,我将根据数据值的集群从16辆汽车中获得4个集群。)

  

约束:总是元素的数量是16,没有。簇的数量是4和大小   群集是4。

我打算做的一个简单方法是对输入数组进行排序,然后将它们分成4组,如下所示。我认为我也可以使用k-means聚类。

但是,我卡住的地方如下:数组中的数据随时间而变化。基本上我需要每隔1秒监视一次数组并重新组合/重新组合它们,以便最大限度地减少集群内的变化。而且,我需要满足上述约束。为此,我得到的一个想法是根据其平均值和变化选择两个组,并在组之间移动数据值以最小化组内的变化。但是,我不知道如何选择要在组之间移动的数据值以及如何选择这些组。我无法在每一秒对数组进行排序,因为我无法承受每秒的NlogN。如果你指导我制作一个简单的解决方案,那就太好了。

sorted `input array: (12 14 16 16 18 19 20 21 24 26 27 29 29 30 31 32)`

cluster-1: (12  14 16 16)
cluster-2: (18 19 20 21)
cluster-3: (24 26 27 29)
cluster-4:  (29 30 31 32) 

1 个答案:

答案 0 :(得分:2)

首先我要指出,对个对象进行排序非常快。特别是当它们之前被分类时,“邪恶的”冒泡排序或插入排序通常是线性的。考虑订单可能改变的地方!当数据适合CPU的第一级缓存时,所有经典的复杂性讨论都不适用。

您是否知道大多数QuickSort实现都会回退到小型数组的插入排序?因为它对小型数组做得相当不错,而且开销很小。

所有复杂性讨论仅适用于非常大的数据集。事实上,它们仅适用于无限大小的数据。在达到无穷大之前,一个更高复杂度顺序的简单算法仍然可以表现得更好。并且对于n < 10,二次插入排序通常优于O(n log n)排序。

然而,k-means对你没什么帮助。

  1. 您的数据是一维的。 甚至不愿意看多维方法,它们的表现会比正确的一维方法(可以利用数据可以订购)更糟糕。
  2. 如果你想要保证运行时间,可能有很多次迭代的k-means是完全不受控制的。
  3. 您无法轻松将约束(例如4-cars规则)添加到k-means中
  4. 我相信你的任务的解决方案(因为数据是1维和你添加的约束)是:

    Sort the integers
    Divide the sorted list into k even-sized groups