【问题标题】:sequential/online kmeans clustering, how does it work? Existing codes?顺序/在线kmeans聚类,它是如何工作的?现有代码?
【发布时间】:2012-08-09 23:44:59
【问题描述】:

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

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

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

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

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

我想要什么:

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

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

【问题讨论】:

  • @mschonaker 最好是 matlab,但我可以使用 C++

标签: c++ matlab full-text-search cluster-analysis k-means


【解决方案1】:

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

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

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

【讨论】:

  • 那么有什么传统的解决方案吗?这是我目前发现的唯一东西:icml.cc/2012/papers/291.pdf
  • “常规解决方案”是什么意思? MacQueen 1967 还不够传统吗?
  • 我不认为我很清楚自己想要什么。也许我完全错误地解决了这个问题。请看我更新的帖子
  • 尝试仅使用新实例更新现有方法。这很简单。或者看看 MacQueen,它实际上“一次处理一个实例”。这显然也可以在流上完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
相关资源
最近更新 更多