我有一个这样的浮点数组:
[1.91, 2.87, 3.61, 10.91, 11.91, 12.82, 100.73, 100.71, 101.89, 200]
现在,我想像这样对数组进行分区:
[[1.91, 2.87, 3.61] , [10.91, 11.91, 12.82] , [100.73, 100.71, 101.89] , [200]]
// [200] 将被视为异常值,因为集群支持较少
我必须为几个数组找到这种段,我不知道分区大小应该是多少。我尝试通过使用 层次聚类(凝聚)来做到这一点,它给了我令人满意的结果。但是,问题是,有人建议我不要将聚类算法用于一维问题,因为它们没有理论上的理由(因为它们适用于多维数据)。
我花了很多时间寻找解决方案。但是,建议似乎完全不同,例如:this和this VS。这个和这个和这个。
我发现了另一个建议,而不是聚类,即自然休息优化。但是,这也需要像 K-means 一样声明分区号(对吗?)。
这很令人困惑(特别是因为我必须在几个数组上执行那种分段并且不可能知道最佳分区号)。
有什么方法可以找到分区(因此我们可以减少分区内的方差并最大化分区之间的方差)并具有一些理论依据?
任何指向文章/论文的指针(如果可用的 C/C++/Java 实现)具有一些理论依据将对我非常有帮助。