我想将一个序列分成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中是否有它的实现?
答案 0 :(得分:3)
也许你可以使用Expectation-maximization algorithm。你的积分是(value, position)
。在您的示例中,这将是:
使用E-M算法,结果将类似于(手动):
这是所需的输出,因此您可以考虑使用它,以及它是否真的适用于所有场景。注释,您必须先分配所需的群集数量,但我认为这对您来说不是问题,因为您已经提出了问题。
让我知道这是否有效;)
修改强>
看到这张照片,就是你谈到的。使用k-means,你应该控制delta value
,这就是位置如何增加,使其值与值相同。但是对于E-M来说这没关系。
编辑2:
好的我不对,你需要控制delta value
。如果将位置增加1或增加3,则不一样:(两个群集)
因此,正如你所说的,如果这个算法的位置很远但是它们的值很接近,那么这个算法可以决定聚类不是邻居的点。您需要保证不会发生这种情况,delta
的增量很高。我认为,如果序列的 2 *(最大 - 最小)值增加,则不会发生这种情况。
现在,您的积分将采用(value, delta * position)
形式。