【问题标题】:OpenCV Random Forest Tie BreakingOpenCV 随机森林决胜局
【发布时间】:2014-01-20 12:16:32
【问题描述】:

有人可以告诉我,OpenCV 随机森林代码是否通过随机选择来解决关系(即没有明确的多数票),或者是否有更确定的机制?我似乎无法在 OpenCV 论坛、O'Reilly OpenCV 书籍或 Google 中找到答案。

【问题讨论】:

    标签: c++ opencv random-forest


    【解决方案1】:

    深入挖掘OpenCV代码()后,发现如下相关代码:

    if( nclasses > 0 ) //classification {
    
      int max_nvotes = 0;
      cv::AutoBuffer<int> _votes(nclasses);
      int* votes = _votes;
      memset( votes, 0, sizeof(*votes)*nclasses );
      for( k = 0; k < ntrees; k++ ) {
        CvDTreeNode* predicted_node = trees[k]->predict( sample, missing );
        int nvotes;
        int class_idx = predicted_node->class_idx;
        CV_Assert( 0 <= class_idx && class_idx < nclasses );
    
        nvotes = ++votes[class_idx];
        if( nvotes > max_nvotes ) {
          max_nvotes = nvotes;
          result = predicted_node->value;
        }
      }
    }
    

    所以,它的作用似乎是:

    1. 遍历每棵树并获得预测
    2. 更新该特定预测类的投票计数
    3. 将该特定预测类的投票数与最大投票数 (max_nvotes) 进行比较
    4. 必要时更新最大投票数

    因此,随机打破平局的想法并没有直接集成到这段代码中,但应该记住,随机森林集合中的树是随机生成的。因此,理论上,决胜局过程是随机的,因为树的顺序(以及它们的预测顺序)是随机的。还有一点需要注意的是,平局将进入第一类以获得最大票数。

    此外,如果多数票数很重要,那么如果任何一个类超过树数的一半以上,则可以使 for 循环短路。因此,如果有 50 棵树并且任何一个类的票数超过 25 票,则无需从剩余的树中获取预测(因为它们与更改多数票无关)。

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2017-03-15
      • 2013-12-03
      • 2014-11-21
      • 2012-10-25
      • 2013-04-25
      • 2019-04-11
      • 2018-02-19
      • 2017-05-03
      相关资源
      最近更新 更多