【问题标题】:OpenCV kmean: how to choose decent values for COUNT and EPS?OpenCV kmean:如何为 COUNT 和 EPS 选择合适的值?
【发布时间】:2016-04-11 12:41:50
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    结论:只有分析您的数据集,反复试验才能为您提供体面值...

    【讨论】:

    • 非常感谢,您的回答帮助我了解更多:D
    猜你喜欢
    • 2021-08-18
    • 2017-06-15
    • 2012-10-05
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2020-03-14
    相关资源
    最近更新 更多