如何在k个均匀部分中分割序列?

时间:2016-08-30 10:12:13

标签: r algorithm split hierarchical-clustering

我想将一个序列分成k个部分,并优化这些子部分的同质性。

Example : 0 0 0 0 0 1 1 2 3 3 3 2 2 3 2 1 0 0 0
Result  : 0 0 0 0 0 | 1 1 2 | 3 3 3 2 2 3 2 | 1 0 0 0 when you ask for 4 parts (k = 4)

在这里,算法没有尝试分割固定长度的部分,而是试图确保相同部分中的元素尽可能均匀。

我应该使用什么算法? R中是否有它的实现?

1 个答案:

答案 0 :(得分:3)

也许你可以使用Expectation-maximization algorithm。你的积分是(value, position)。在您的示例中,这将是:

Example

使用E-M算法,结果将类似于(手动):

Solution

这是所需的输出,因此您可以考虑使用它,以及它是否真的适用于所有场景。注释,您必须先分配所需的群集数量,但我认为这对您来说不是问题,因为您已经提出了问题。

让我知道这是否有效;)

修改

看到这张照片,就是你谈到的。使用k-means,你应该控制delta value,这就是位置如何增加,使其值与相同。但是对于E-M来说这没关系。

Delta increment

编辑2:

好的我不对,你需要控制delta value。如果将位置增加1或增加3,则不一样:(两个群集)

Difference

因此,正如你所说的,如果这个算法的位置很远但是它们的值很接近,那么这个算法可以决定聚类不是邻居的点。您需要保证不会发生这种情况,delta的增量很高。我认为,如果序列的 2 *(最大 - 最小)值增加,则不会发生这种情况。

现在,您的积分将采用(value, delta * position)形式。