【问题标题】:Parameter oob_score_ in scikit-learn equals accuracy or error?scikit-learn 中的参数 oob_score_ 等于准确度还是错误?
【发布时间】:2015-10-04 23:17:15
【问题描述】:

我从 Python scikit-learn 包中实现了随机森林分类器 (RF),用于解决机器学习问题。在第一阶段,我使用交叉验证来抽查其他算法,现在我选择了 RF。

后来我还检查了 RF 的 OOB 估计告诉我什么。但是,当我将 'oob_score_' 中的回报与 CV 的结果进行比较时,我发现差异很大。

scikit-learn 文档告诉我:

oob_score : 布尔值

是否使用袋外样本来估计泛化误差。

由于文档的原因,我假设参数“oob_score_”是误差估计。但在寻找原因时,我也想到它实际上可能会估计准确性,这将 - 至少有点 - 更接近我的 CV 结果。我还检查了代码,更相信它的准确性,但想确定......(在这种情况下,我发现文档误导了顺便说一句)。

scikit-learn 中的 oob_score_ 是准确度还是误差估计?

【问题讨论】:

    标签: python python-2.7 scikit-learn random-forest


    【解决方案1】:

    类似于.score 方法,返回模型的准确度。它只是推广到 oob 场景。文档确实有点误导。

    您可以在代码https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/forest.py中找到

    for k in range(self.n_outputs_):
                if (predictions[k].sum(axis=1) == 0).any():
                    warn("Some inputs do not have OOB scores. "
                         "This probably means too few trees were used "
                         "to compute any reliable oob estimates.")
    
                decision = (predictions[k] /
                            predictions[k].sum(axis=1)[:, np.newaxis])
                oob_decision_function.append(decision)
                oob_score += np.mean(y[:, k] ==
                                     np.argmax(predictions[k], axis=1), axis=0)
    

    它只是计算正确分类的平均值。

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 2017-05-18
      • 2014-04-14
      • 2017-02-07
      • 2015-03-20
      • 2017-11-23
      • 2016-01-23
      • 2022-01-08
      相关资源
      最近更新 更多