OpenCV kmean:如何为 COUNT 和 EPS 选择合适的值?

OpenCV kmean: how to choose decent values for COUNT and EPS?

我正在尝试使用 OpenCV 中的 kmean 函数将 36000 张样本图像预分类为 100+ 类(以减少我为监督学习准备训练数据的工作)。在这个函数中有两个我不太了解的参数:cv::TermCriteria::EPScv::TermCriteria::COUNT

cv::kmeans(dataset.t(), K, kmean_labels, cv::TermCriteria( cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 10, 1.0),
            3, cv::KMEANS_PP_CENTERS, kmean_centers);

在OpenCV文档中,是这样解释的: cv::TermCriteria::EPS:迭代算法停止时所需的精度或参数变化。

cv::TermCriteria::COUNT:要计算的最大迭代次数或元素数。

上面的解释我不是很清楚。任何人都可以帮助解释更多并展示如何为 COUNT 和 EPS 找到好的值吗? 非常感谢。

没有适合所有应用程序的神奇数字(否则它们不会成为参数)。

Kmeans 是一种迭代算法,它会朝着最优方向移动,每次迭代都会变得更好,但是你需要告诉你的算法什么时候停止。

使用 cv::TermCriteria::COUNT,你告诉算法:你可以执行 x 次迭代,然后停止。但这并不能保证任何精度。

使用cv::TermCriteria::EPS,你告诉算法继续迭代,直到两次连续迭代之间的差异变得足够 小。参数 EPS 告诉算法这个差异应该变得多小。这当然取决于您提供给算法的数据集。假设您将所有数据点乘以 10;那么 EPS 应该相应地变化(我想是二次方的,但不确定)。

当你使用both两个参数时;您告诉算法在满足两个条件之一时停止;例如:当两次连续运行之间的差异小于 0.1 时停止迭代,OR 当您完成 10 次迭代时。

结论:只有分析你的数据集,反复试验才能给你体面的值...