聚类不同的班级

时间:2017-06-06 00:04:01

标签: machine-learning computer-vision associations cluster-analysis

我想聚集具有多个类(最多10个)的数据集。但是这种聚类问题与通常的聚类不同。我需要聚类不同的类(如图中所示; https://ibb.co/iiNbqv)而不是相同/相似的类。我应该使用哪种方法?你会推荐什么?

问题如下; 我有几个帧/图像(最多10个),每帧有数十万个检测。因此,我正在处理的数据是检测的位置(x和y坐标)。我将要做的是在这些帧中有多少检测与一定距离阈值重叠。约束是帧的每次检测不应该在图片中看到的多于一次的相同重叠簇中。所以基本上,我应该找到距离其他帧最近的点的检测,并将它们放在同一个簇中。但是,一旦我这样做,群集中的每个点都不应该远远超过远端阈值

干杯

2 个答案:

答案 0 :(得分:0)

根据您的图片和您绘制的圆圈,这似乎是根据它们之间的距离聚类不同数据点的问题。一个简单的基于欧几里德距离的聚类算法应该提供您正在寻找的结果。

这样的东西会根据它们之间的距离来衡量数据点。唯一的参数是距离阈值,您应将其设置为与您的问题一致的距离阈值。

#PSEUDO-CODE!
#p is a list of all data points

for i=all points
 if( p(i).used == false)
 {

   #Create new cluster c
   p(i).cluster = c

   for n=1:all_Points
   {
      if ( p(n).used == false)
      {
         if p(n).class not in cluster
         {
             d=dist(p(i),p(n))

             if d<max
             {
                p(n).cluster = c;
                p(n).used = true;
             }
        }
    }
}

这基本上到达每个点,并找到它们中的哪一个,并将它们分配给同一个集群。这个聚类例程有很多变化可以实现不同的目标。

例如,您可以比较群集的当前质心之间的距离,而不是初始化群集的点,或者比较最后添加到群集的点而不是第一个。取决于哪种方法可以更好地处理数据的性质。

答案 1 :(得分:0)

群集在这里不会对你有所帮助,因为它太探索了。

您应该通常考虑优化。特别是,您的问题与设置封面问题有相似之处。我可以告诉你,你想要用三个集合覆盖所有实例,这样三个元素就在不同的&#34;类和#34;和最相似的?

根据优化理论结果,你很可能能够证明这个问题是NP难的,因此贪婪的近似算法是处理这个问题的首选方法。