OpenCV 随机决策森林:如何获得后验概率

Posted

技术标签:

【中文标题】OpenCV 随机决策森林:如何获得后验概率【英文标题】:OpenCV Random Decision Forest: How to get posterior probability 【发布时间】:2018-02-19 11:17:06 【问题描述】:

我在多个网站上进行了研究,但找不到任何解决方案。 问题来了:

我正在使用来自 OpenCV 的 RTrees 实现逐像素分类。我需要每个班级的后验概率。我试图通过cv::ml::StatModel::predict() 得到它,但输出矩阵只包含预测值。还有其他方法可以从 RTrees 中获取后验概率吗?

PS:我对机器学习还很陌生,所以请原谅我的知识不足^^"

【问题讨论】:

【参考方案1】:

您可以参考cv::ml::RTrees::getVotes 成员函数,而不是使用cv::ml::StatModel::predict。这样,在分类的情况下,您可以获得给定样本为每个类别投票的树的数量。通过将这些投票数除以森林大小,您可以获得后验概率的近似值。

getVotes 函数应该被调用 而不是 predict 像这样:

cv::Mat samples = [one or multiple samples (their feature vectors)]
cv::Mat votes;
classifier.getVotes(sample, votes, 0);
// provide 0 here unless you would like to manipulate with RTrees flags

您应该注意的是,votes 矩阵将比样本数多一行。在第一行中,列举了您的类(如果我从 OpenCV 源代码中记得很清楚,按升序排列)。

答案是 OpenCV 3.4.1 版本的最新版本。

【讨论】:

对不起,我没有更新那个帖子,但我已经解决了,就像你描述的那样。原来这个功能是在我发帖几个月后发布的版本中引入的。无论如何,非常感谢您的帮助和详细的解释。我相信它也会对其他人非常有帮助:)

以上是关于OpenCV 随机决策森林:如何获得后验概率的主要内容,如果未能解决你的问题,请参考以下文章

贝叶斯决策 最大似然估计

贝叶斯决策论及贝叶斯网络

机器学习贝叶斯决策论

贝叶斯分类器

先验概率与后验概率的区别

最大似然估计和最大后验概率