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

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

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

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

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

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

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

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

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

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

编辑:

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


回答:

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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