所以,我说我有一个像这样的数组:
[1,1,2,3,10,11,13,67,71]
是否有一种方便的方法将数组划分为类似的内容?
[[1,1,2,3],[10,11,13],[67,71]]
[我看过类似的问题,但大多数人建议使用k均值对点进行聚类,例如scipy,对于像我这样的初学者来说,这非常令人困惑。我还认为k均值更适合于二维或二维聚类,对吗?是否有任何方法可以将N个数字的数组划分为多个分区/集群,具体取决于数字?
[有些人还建议采用严格范围划分,但是并不总是将结果呈现为预期
对于一维问题,请勿使用多维聚类算法。单个维度比您天真的认为更特别,因为您实际上可以对其进行[sort],这使事情变得容易得多。]实际上,通常甚至不称其为聚类,但例如细分或自然休息优化。您可能希望查看Jenks Natural Breaks Optimization和类似的统计方法。
也是一个很好的观察方法,具有强大的统计背景。密度的局部最小值是将数据拆分为聚类的好地方,但出于统计原因,也可以这样做。 KDE可能是最有效的一维数据聚类方法。使用KDE,显然一维数据表现得更好。在1D模式下,您具有局部最小值;但在2D模式下,您可能会有鞍点和此类“也许”分裂点。请参阅此Wikipedia illustration of a saddle point,以了解这样的点可能适合或不适合拆分群集。
请参见this answer以了解如何在Python中执行此操作的示例(绿色标记是群集模式;红色标记是数据被切割的点; y轴是密度的对数似然):weka.filters.supervised.attribute.Discretize
使用Fayyad&Irani的MDL方法或Kononeko的MDL标准weka.filters.unsupervised.attribute.Discretize
使用简单装箱