修改后的 k 表示顺序很重要的一维数组的算法
Modify kmeans alghoritm for 1d array where order matters
我想在 order/position 重要的一维数组中找到组。我尝试使用 numpys kmeans2,但只有当我的数字按递增顺序排列时它才有效。
我必须最大化相邻子阵列之间的平均差异
例如:如果我有数组 [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)
更好的方法
回答:我最终得到了修改后的树状图,我只合并了邻居。
K-means 是关于最小化最小二乘法。它最大的缺点(有很多)是您需要知道 k。为什么要继承这个缺点?
与其让 k-means 不忽略顺序,不如看看 时间序列分割 和 变化检测 更适合这个问题的方法?
例如如果 abs(x[i] - x[-1]) > stddev
其中 stddev
是数据集的标准差,请拆分您的时间序列。或者最后 10 个样本的标准差(在上面的系列中,标准差大约是 3,所以它会拆分为 [1,2,2], [8,9], [0,0,0,1,1,1]
,因为 0 到 1 的变化并不显着。
我想在 order/position 重要的一维数组中找到组。我尝试使用 numpys kmeans2,但只有当我的数字按递增顺序排列时它才有效。 我必须最大化相邻子阵列之间的平均差异
例如:如果我有数组 [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)
更好的方法回答:我最终得到了修改后的树状图,我只合并了邻居。
K-means 是关于最小化最小二乘法。它最大的缺点(有很多)是您需要知道 k。为什么要继承这个缺点?
与其让 k-means 不忽略顺序,不如看看 时间序列分割 和 变化检测 更适合这个问题的方法?
例如如果 abs(x[i] - x[-1]) > stddev
其中 stddev
是数据集的标准差,请拆分您的时间序列。或者最后 10 个样本的标准差(在上面的系列中,标准差大约是 3,所以它会拆分为 [1,2,2], [8,9], [0,0,0,1,1,1]
,因为 0 到 1 的变化并不显着。