0

我对在线 kmeans 聚类有点困惑。我知道它允许我一次只使用一个数据进行聚类。但是,这一切都仅限于一个会话吗?假设我有一堆通过这种方法聚类的数据,我得到了聚类的数据结果,我将来可以向集群添加更多数据吗?

我也一直在寻找此代码的实现,但无济于事。有人知道吗?

更新:澄清更多。这是我的代码现在的工作方式:

  1. 图像取自实时视频源,一旦保存了足够多的图片,就可以获取 sift 特征的 kmeans。
  2. 重复步骤1,新一批live feed图片,再次获取kmeans。将 kmeans 向量与之前的 kmeans 相结合,例如:[AB]

你可以看到这很糟糕,因为我很快得到了太多的簇,而且每批簇肯定会与另一批重叠。

我想要的是:

  1. 图片取自实时视频源,保存图片后,获取 kmeans
  2. 重复第 1 步,再次获取 kmeans,它会更新并将新集群添加到前一个集群中。

除非我没有正确理解它们,否则我所看到的任何东西都无法适应。

4

1 回答 1

1

如果您查看原始(!)出版物,MacQueen 提出的方法(k-means 名称的由来)实际上是一种在线算法。我不确定 MacQueen 是否对数据进行了多次传递以改善结果。我相信他使用了单次传递,并且对象永远不会被重新分配到不同的集群。如果是这样,那已经是在线算法了!

平均值通常计算为sum / count。从数字的角度来看,这不是很明智。例如,在经典的 Knuth 书中,您可以找到一种增量更新方式的方法。维基百科也有。

一旦您真正想要重新分配较早的点,事情就会变得稍微复杂一些。但通常在流式上下文中,您不知道前面的要点,因此无论如何您都不能这样做。

于 2012-08-15T03:50:54.007 回答