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

我正在开发一个基于图像数据对不同种类狗进行分类的算法。算法的步骤如下:

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

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

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

  4. 用聚类中找到的“词”的直方图来表示每张图像。

  5. 将这些图像表示(特征向量)输入分类器进行训练…

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

有谁知道如何防止聚类算法找到“坏”的词吗?目前我只是多次进行聚类并取我的分类器的平均准确性,但肯定有更好的方法。

感谢您花时间阅读这篇文章,也感谢您的帮助!

编辑:

我不是在使用KMeans进行分类;我使用的是支持向量机进行分类。我使用KMeans来寻找图像描述符的“词”,然后使用这些词来创建描述每张图像的直方图。这些直方图作为特征向量被输入到支持向量机中进行分类。


回答:

有很多方法可以使聚类变得可重复:

  • 处理k-means随机性的最基本方法是简单地多次运行它,并选择最佳结果(即最小化聚类内距离/最大化聚类间距离的那个)。
  • 可以使用一些固定初始化方法来代替随机化。对于k-means的起始有很多启发式方法。或者至少使用像k-means++这样的算法来最小化方差。
  • 使用k-means的修改版本,该版本保证正则化函数的全局最小值,即凸k-means
  • 使用不同的聚类方法,该方法是确定性的,即数据网

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注