如何对抗由 KMeans 聚类引起的随机性

tri*_*ta2 3 cluster-analysis machine-learning computer-vision k-means

我正在开发一种算法来根据图像数据对不同类型的狗进行分类。该算法的步骤是:

  1. 遍历所有训练图像,检测图像特征(即 SURF),并提取描述符。收集所有图像的所有描述符。

  2. 在收集的图像描述符中聚类并在集合中找到 k 个“词”或质心。

  3. 重申所有图像,提取 SURF 描述符,并将提取的描述符与通过聚类找到的最接近的“词”进行匹配。

  4. 将每个图像表示为聚类中找到的单词的直方图。

  5. 将这些图像表示(特征向量)提供给分类器并训练...

现在,我遇到了一些问题。在图像描述符集合中找到“单词”是非常重要的一步。由于聚类的随机性,每次运行我的程序时都会发现不同的聚类。不幸的结果是,有时我的分类器的准确度会非常好,而有时则非常差。我把这归结为聚类算法有时会找到“好”词,有时会找到“坏”词。

有谁知道我如何通过查找“坏”词来对冲聚类算法?目前我只是聚类几次并取分类器的平均准确度,但必须有更好的方法。

感谢您花时间阅读本文,并感谢您的帮助!

编辑:

我没有使用 KMeans 进行分类;我正在使用支持向量机进行分类。我使用 KMeans 来查找图像描述符“单词”,然后使用这些单词创建描述每个图像的直方图。这些直方图作为特征向量被馈送到支持向量机进行分类。

lej*_*lot 5

有许多可能的方法使聚类可重复:

  • 处理 k-means 随机性的最基本方法是简单地运行它多次并选择最好的一个(最小化内部集群距离/最大化集群间距离的那个)。
  • 可以对您的数据使用一些固定的初始化而不是随机化。有许多启发式方法可以启动 k 均值。或者至少通过使用k-means++ 之类的算法来最小化方差
  • 使用 k-means 的修改来保证正则化函数的全局最小值,即。凸k均值
  • 使用不同的聚类方法,这是确定性的,即。数据网