如何“智能”分类排序数据的集合?

机器算法验证 聚类 直方图 分箱
2022-02-27 17:17:29

我正在尝试智能地对已排序的集合进行分类。我有条数据的集合。但我知道这些数据适合个大小不等的箱子。我不知道如何智能地选择端点以正确拟合数据。例如:nm

假设我的收藏中有 12 件物品,并且我知道这些数据可以放入 3 个箱子中:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

如何智能地为的 bin 选择断点?i={13},{49},{1012}

我当前的实现将数据分成大小均匀的箱,然后取端点的平均值来找到箱末端的索引。所以它是这样工作的:

Index:  1 2 3 4 5 6 7 8 9 10 11 12
Value:  1 1 1 3 3 3 3 3 3 5  5  6

first break evenly: i = 1-4, 5-8, 9-12
mean endpoints:  between 4 and 5: (3+3)/2 = 3
                 between 8 and 9: (3+3)/2 = 3

所以现在低于 3 的任何东西都适合 bin 1,高于 3 但低于 3 的任何东西都适合 bin 2,高于 3 的任何东西都适合 bin 3。你可以看到我的问题是什么。如果数据具有不相等的箱,我的方法将失败。

一个朋友提到了k-最近邻算法,但我不确定。

2个回答

我认为你想要做的就是所谓的聚类。您希望将您的“值”组合在一起,以便将相似的值收集在同一个 bin 中,并且预设总 bin 的数量。

您可以使用k-means 聚类算法解决此问题在 MATLAB 中,您可以通过以下方式执行此操作:

bin_ids = kmeans(Values,3); 

上述调用会将值分为Values三组,以使组内差异最小。

k-means 是一种选择,但对于一维数据来说不是很明智。在一维数据中,您有一个巨大的好处:数据可以完全排序。

看看自然休息优化
http ://en.wikipedia.org/wiki/Jenks_natural_breaks_optimization