0

我正在尝试使用 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 找到好的值?非常感谢你。

4

1 回答 1

0

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

Kmeans 是一种迭代算法,它会朝着最优方向发展,并且每次迭代都会变得更好,但是您需要告诉您的算法何时停止。

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

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

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

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

于 2016-01-07T08:18:29.870 回答