machine-learning - 如何对抗 KMeans 聚类引起的随机性

标签 machine-learning computer-vision cluster-analysis k-means

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

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

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

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

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

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

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

有谁知道我如何避免聚类算法发现“坏”词?目前我只是进行几次聚类并取分类器的平均准确率,但一定有更好的方法。

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

编辑:

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

最佳答案

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

  • 处理 k 均值随机性的最基本方法就是简单地运行多次并选择最佳的方法(最小化内部簇距离/最大化簇间距离的方法)。
  • 可以使用一些fixed initialization为您的数据而不是随机化。有许多用于启动 k 均值的启发式方法。或者至少使用 k-means++. 这样的算法来最小化方差
  • 使用 k-means 的修改来保证正则化函数的全局最小值,即convex k-means
  • 使用不同的聚类方法,这是确定性的,即。 Data Nets

关于machine-learning - 如何对抗 KMeans 聚类引起的随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18674701/

相关文章:

machine-learning - 特征工程和特征提取有什么区别?

python - 如果我想使用无法通过 TensorFlow 加载到内存中的大型数据集,我该怎么办?

python - cv2.floodfill 如何工作?

opencv - 视野如何改变立体视觉中的深度估计?

opencv - 从 Canny 边缘提取单线轮廓

python - Networkx 图聚类

mySQL 数据库 : Separating/clustering(? ) 数据

python - 为什么 LSTM 的导数设置为零

machine-learning - ML.Net 0.17.0 版本之后 ML.Net MatrixFactorizationTrainer 类发生了什么?

python - 如何绘制图形聚类系数的分布