我有一个1D数据集如下
"
我希望从这个值集中获得最频繁的范围。我想到了应用k-mean聚类算法并将聚类与大多数元素联系起来。我使用19, 23, 35, 39, 39, 48, 48, 72, 83, 91, 151, 152, 153, 156, 158, 160, 250, 340, 490
输出应为k = sqrt(n/2)
在搜索时,我看到很少有文章表明将k-means聚类应用于1d数据集并不是一个好主意。因此我想到将1d数据集映射到3d空间。我所做的只是假设每个数据点的y和z坐标为0。
有没有更好的方法将此数据集映射到3d空间? 或者有更好的方法来获得1d数据集中最频繁的范围吗?
答案 0 :(得分:1)
每次添加尺寸都会让生活变得更加困难,因此从1维到3维不太可能让生活变得更轻松。
我会按顺序对数据进行排序,然后考虑从右向左移动数据的方法。例如,移动指针使它们在它们之间有一个N项的窗口,并找到窗口左端的值与窗口右端的值之间的差异最小的位置。
如果你真的想使用类似聚类的k-means,你可以对排序值数组使用动态编程来获得确切的答案。从左到右和每个点的工作计算,对于i = 1..k,将值分成该点的最低成本方式为i个簇。您可以通过考虑每个m的成本来确定i个群集的位置N的最佳答案,使m..N成为单个群集并查看m-1的答案以计算出划分前一个群集的最佳成本值为i-1簇。