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


11

我正在尝试智能地对已排序的集合进行分类。我有条数据的集合。但我知道,这个数据拟合到不平等的大小分档。我不知道如何智能地选择端点以正确适合数据。例如: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的任何东西都适合于垃圾箱1,高于3但高于3的任何东西都适合于垃圾箱2,高于3的任何东西都适合于垃圾箱3。您可以看到我的问题所在。如果数据具有不相等的bin,则我的方法将失败。

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


1
您能解释一下“智能”的意思吗?您想通过装箱完成什么?为什么首先要进行分箱?
ub

对于倒数第二段,您是指,和吗?否则,这对我来说毫无意义。<3bin13&<4bin24bin3
gung-恢复莫妮卡

我的意思是聪明地(不是像我那样天真地假设垃圾箱间隔均匀)。如果一条数据落在特定的bin中,这告诉我有关该条数据的一些非常重要的信息。我对数据进行排序以确定bin中断索引,然后确定每条数据分别属于哪个bin。
马修·肯奈兹

除非我在求平均值时做错了什么,否则我认为我做对了。通过选择偶数; y间隔的垃圾箱,我所有的端点都是3。因此,我无法正确地对我的数据进行装箱。这就是为什么我的实现在没有均匀间隔的垃圾箱的情况下崩溃的原因。
马修·肯奈茨

这是我在稍微不同的环境中所做的事情
2012年

Answers:


9

我认为您想要做的就是群集。您希望将“值”组合在一起,以便将相似的值收集在同一容器中,并且预设了总容器的数量。

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

bin_ids = kmeans(Values,3); 

上面的调用将这些值分为Values三组,以使组内差异最小。


1
我也发现了。这正是我实现的,并且效果很好。我来这里是为了回答我自己的问题,但是你击败了我!集群就是我想要做的。
马修·肯奈茨

8

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

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


这是非常有趣的。您能否详细说明为什么这可能比k表示的更好?
马修·凯姆内兹

我问的主要原因是因为我在算法中使用MATLAB,而在任何工具箱等中都找不到任何Jenks自然中断优化,所以我需要实现自己的。我只是想知道在我换档并实现它之前,这可能会更好/更快。
马修·肯奈兹

1
k-均值非常愚蠢。它具有手段,并且将始终在这两种手段中间分裂。因此,考虑例如0 1 2 3 4 5 7 7 7,k均值将优先分裂4和5有时甚至会分裂3和4之间的
已退出- Anony-慕斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.