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

时间:2016-01-07 07:46:13

标签: c++ opencv k-means unsupervised-learning

我正在尝试使用OpenCV中的kmean函数将36000个样本图像预分类为100多个类(以减少我为有监督学习准备列车数据的工作)。在这个函数中有两个我不太懂的参数: cv :: TermCriteria :: EPS cv :: 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的好价值? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

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

Kmeans是一种迭代算法,它将朝着最佳状态发展,每次迭代都应该变得更好,但是你需要告诉算法什么时候停止。

使用 cv :: TermCriteria :: COUNT ,您可以告诉算法:您可以执行x次迭代,然后停止。但这并不能保证你的准确性。

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

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

总结:只对您的数据集进行分析,而试验和错误可以为您提供体面的值......