我正在尝试使用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的好价值? 非常感谢你。
答案 0 :(得分:0)
没有适合所有应用程序的神奇数字(否则它们不是参数)。
Kmeans是一种迭代算法,它将朝着最佳状态发展,每次迭代都应该变得更好,但是你需要告诉算法什么时候停止。
使用 cv :: TermCriteria :: COUNT ,您可以告诉算法:您可以执行x
次迭代,然后停止。但这并不能保证你的准确性。
使用 cv :: TermCriteria :: EPS ,您告诉算法继续其迭代,直到两次连续迭代之间的差异足够小。参数EPS
告诉算法该差异应该有多小。这当然取决于您为算法提供的数据集。假设您将所有数据点乘以10;那么EPS应该相应地变化(我认为是平方的,但不确定)。
当您使用两个这两个参数时;当两个条件之一满满时,告诉算法停止;例如:当你完成10次迭代时,当两次连续运行之间的差异小于0.1, OR 时停止迭代。
总结:只对您的数据集进行分析,而试验和错误可以为您提供体面的值......