请教一个聚合分类的算法

Discussion in 'Julia / MATLAB / SAS' started by espresso, Mar 13, 2010.

  1. 我想把下面一些数据进行分类,要求尽量把互相之间距离很近的数归为一类,
    当然了,这个“互相之间的距离”是可以控制的参数。

    例如,有下面这些数字:
    3, 5, 7, 11, 12, 32, 45, 46, 49, 88

    如果设定距离为5的话,应该分为5类:
    3,5,7
    11,12
    32,
    45,46,49
    88

    进一步,有两种方法对分类进行优化:
    1)按最小距离优化。找出“相互之间距离”的最小值,以实现每个分类中数据之间都很临近,但是类的数量可能很多。
    2)按最小分类个数优化。即分出的类尽量少,但是数据之间的距离可能增大。

    这只是在一维空间上的分类,比这个复杂的是对平面(或高维空间)中的向量进行分组,
    不过我目前只需要在一维上分类,有没有简化的高效算法?

    我知道很多海友大虾是数量分析和算法的高手,
    向各位请教一下什么样的算法可以比较高效的完成这种分类。
    MATLAB里面有没有对于的现成算法?

    先谢啦!!! :)
     
  2. 这种一维的数据用聚合分类,把问题搞复杂了吧
     
  3. 我就是想找一个高效而简单的方法,不知道lz有什么好的建议,谢谢~
     
  4. 信息不足。那几个数太复杂。
     
  5. 有,cluster-基于距离的聚类,不过诚如楼上所说,一维数据,有必要吗?
     
  6. 我在这里不是要讨论这种做法是否overkill或者其合理性,而是希望得到一些具体实现上的建议。

    toneyson, 谢谢你提到的cluster,我昨天晚上也在网上找到一些这方面的信息,先看一下,估计目前最简单的方法就是用二维上的算法,y值都取0就可以了。需要实验一下...
     
  7. 当前的减去前面的一个值的差>5就做为新组标志?

    一个for就可以了吧。
     
  8. jevinlee,你的这个方法不错!!我就是不想搞得太复杂,杀鸡用牛刀地调用matlab,所以才跑到这里问一下,海洋部落里面的能人多啊 :p

    toneyson, 我找到了clustering一个比较普遍的算法:K-means clustering,有现成的matlab代码,matlab的stats toolbox里面也有一个对应的函数。还有快速的K-means算法。不过好像还是jevinlee的方法比较直接,甚至都不用matlab。我打算有空都试一下。
     
  9. 别客气,我也是凑巧才知道的,希望对你有所帮助。
     
  10. k-means啊
     
  11. 使用k均值聚类算法,在matlab中有函数可以用的