2016-01-07 15 views
0

我正尝试在OpenCV中使用kmean函数将36000个示例图像预分为100多个类(以减少我的工作,为监督学习准备列车数据)。在这个函数中有两个参数我不太明白:cv :: TermCriteria :: EPScv :: TermCriteria :: COUNTOpenCV kmean:如何为COUNT和EPS选择体面值?

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

没有适合所有应用程序的神奇数字(否则它们不会是参数)。 Kmeans是一种迭代算法,它将朝最佳方向发展,每次迭代应该会变得更好,但是您需要告诉算法何时停止。

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

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

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

总之:只有你的数据集的分析,以及试验和错误可以给你体面值...

+0

非常感谢你,你的回答可以帮助我了解更多:d – Hnanhtuan