我想在一维数组中找到订单/位置很重要的组。我试图使用numpys kmeans2,但只有当我的数字按递增顺序时才有效。 我必须最大化neigbour子阵列之间的平均差异
例如:如果我有数组[1,2,2,8,9,0,0,0,1,1,1]
并且我想要获得4个组,则结果应该类似于[1,2,2], [8,9], [0,0,0], [1,1,1]
有没有办法比O(n ^ k)
做得更好回答:我最终得到了修饰的树状图,我只合并了内部。
答案 0 :(得分:1)
K-means是关于最小化最小二乘法。其中最大的缺点(有许多)是你需要知道k。你为什么要继承这个缺点?
为什么不用黑客攻击k-means而不是忽略订单,为什么不要反而看一下时间序列分割和更改检测方法适合这个问题?
E.g。如果abs(x[i] - x[-1]) > stddev
stddev
是数据集的标准偏差,则拆分您的时间序列。或者最后10个样本的标准差(在上面的系列中,标准偏差约为3,因此它将分为[1,2,2], [8,9], [0,0,0,1,1,1]
,因为0到1的变化不显着。