scikit-learn 中的参数 oob_score_ 等于准确度还是错误?

Posted

技术标签:

【中文标题】scikit-learn 中的参数 oob_score_ 等于准确度还是错误?【英文标题】:Parameter oob_score_ in scikit-learn equals accuracy or error? 【发布时间】: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_ 是准确度还是误差估计?

【问题讨论】:

【参考方案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)

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

【讨论】:

以上是关于scikit-learn 中的参数 oob_score_ 等于准确度还是错误?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn TSNE 中的 random_state 参数是啥?

scikit-learn 中的超参数优化(网格搜索)

class_weight 参数在 scikit-learn SGD 中的作用是啥

python - 如何在python scikit-learn中找到逻辑回归中的正则化参数?

机器学习:SVM(scikit-learn 中的 RBFRBF 中的超参数 γ)

了解 scikit-learn GridSearchCV - 参数调整和平均性能指标