如何精确计算袋外误差及其含义?

我找到了几种关于袋外误差的解释,包括Stack Overflow上的一个:随机森林中的袋外误差是什么

然而,我没有找到任何关于如何精确计算它的公式。让我们以MATLAB帮助文件为例:err = oobError(B) 计算误分类概率[…]。B是使用TreeBagger类生成的树模型。

什么是误分类概率?它仅仅是袋外数据的准确率吗?

准确率 = (TP + FP) / (P+N)

那么,它仅仅是所有正确分类的实例与集合中所有实例的比率吗?

如果这是正确的,一方面我看到了计算它的好处,因为如果你有数据集来测试的话,这相当简单,就像袋外数据集一样。

但另一方面,准确率在处理不平衡数据集时已知不是一个好的指标。所以我的第二个问题是:袋外误差能否处理不平衡数据集,如果不能,在这种情况下指定它是否还有意义?


回答:

袋外误差只是在训练过程中未见过的样本上计算的误差。它在装袋方法中扮演着重要角色,因为通过对训练集进行自助抽样(通过随机有放回抽样构建新集合),你实际上得到了相当一部分未使用的训练数据(在极限情况下大约是30%)。如果你有许多这样的模型(如在随机森林中,你有许多树,每棵树都在其自己的自助样本上训练),那么你可以对这些误差进行平均,从而获得泛化误差的估计。

什么是误分类概率?它仅仅是袋外数据的准确率吗?

误分类概率是1-准确率

如果这是正确的,一方面我看到了计算它的好处,因为如果你有数据集来测试的话,这相当简单,就像袋外数据集一样。

因为使用一个测试集只能近似当前模型的质量(无论它是什么),而进行袋外误差计算是对你集合中单个元素(在随机森林的情况下是树)在所有可能的训练集选择上的估计。这是一种不同的概率度量,例如请参阅Tibshirani的《统计学习的要素》第7章。此外,它的优势在于你不会浪费任何数据点。保留一个单独的测试集需要相当多的数据点,这样你才能在剩余数据上获得合理的估计(模型)。袋外估计使你能够在使用所有可用数据的同时,说出它表现得如何。

但另一方面,准确率在处理不平衡数据集时已知不是一个好的指标。所以我的第二个问题是:袋外误差能否处理不平衡数据集,如果不能,在这种情况下指定它是否还有意义?

袋外误差与准确率无关。它在scikit-learn中实现时使用准确率,但它是基于任何损失函数(分类指标)定义的。你可以用MCC、F1或任何你想要的指标进行完全类似的操作。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注