什么是随机森林中的袋外误差?

73

什么是随机森林中的袋外误差? 它是否是寻找正确的随机森林树数量的最优参数?


9
如果这个问题不是针对具体实现的,你可以考虑在http://stats.stackexchange.com/上发布你的问题。 - Sentry
2个回答

185
我会尝试解释:
假设我们的训练数据集由T表示,假设数据集具有M个特征(或属性或变量)。 T = {(X1,y1), (X2,y2), ... (Xn, yn)}
Xi is input vector {xi1, xi2, ... xiM}

yi is the label (or output or class). 

RF摘要:

随机森林算法是一种基于两种方法的分类器:

  • Bagging
  • Random subspace method.

假设我们决定在我们的森林中有S个树,那么我们首先创建S个数据集,这些数据集与T中的数据进行随机重采样(每个数据集重复n次),大小与原始数据集相同。这将导致数据集{T1,T2,... TS}。每个数据集称为引导数据集。由于“with-replacement”,每个数据集Ti都可以具有重复的数据记录,并且Ti可能会从原始数据集中丢失若干数据记录。这称为Bootstrapping。(en.wikipedia.org/wiki/Bootstrapping_(statistics))

Bagging是获取引导并聚合学习每个引导生成模型的过程。

现在,RF创建S个树,并使用m (=sqrt(M) or =floor(lnM+1))个随机子特征(来自M个可能的特征),以创建任何树。这被称为随机子空间方法。

对于每个引导数据集 Ti,您创建一个树 Ki。如果您想分类某些输入数据 D = {x1,x2,...,xM},则让它通过每棵树并产生 S 个输出(每棵树一个) ,可以用 Y = {y1,y2,...,ys} 表示。最终预测是对此集合进行多数投票。
袋外误差:
创建分类器(S 棵树)后,对于原始训练集中的每个 (Xi,yi),即 T,选择不包括 (Xi,yi) 的所有 Tk。请注意,这个子集是不包含原始数据集中特定记录的引导数据集的集合。这个集合称为袋外示例。有 n 这样的子集(每个原始数据集 T 中的数据记录一个)。OOB 分类器仅在不包含 (xi,yi)Tk 上聚合投票。

袋外估计用于泛化误差,是指袋外分类器在训练集上的错误率(与已知的yi进行比较)。

为什么这很重要?

在Breiman [1996b]的袋式分类器误差估计研究中,给出了经验证据表明,袋外估计与使用与训练集大小相同的测试集一样准确。因此,使用袋外误差估计可以省去设置一个测试集的必要性。1

(感谢@Rudolf的更正。见下方评论。)


4
谢谢@bourneli,我同意回答简洁明了更有用,但我注重将答案放在上下文中,这就是占用大部分空间的原因。 - Manoj Awasthi
12
非常好的解释,但是有一个小错误 - 你称为“Bagging”的有放回抽样实际上被称为“自助法”(Bootstrapping)。(https://en.wikipedia.org/wiki/Bootstrapping_(statistics))Bagging 是指采用自助法(Bootstrapping)的过程,然后对每个自助样本学习的模型进行聚合。(https://en.wikipedia.org/wiki/Bootstrap_aggregating) - Rudolf Mayer
8
嗨,亚历克斯,基本上就像上面解释的那样:我们创建了一个“外围分类器”,逐条获取训练记录(表示为“(Xi,yi)”),从所有可用的训练记录中(表示为“T”)。我们查找所有缺少此记录的自助样本或数据集(例如“T3”、“T7”、“T8”、“T9”),然后将当前记录“(Xi,yi)”通过随机森林运行,但仅从对应于没有该记录的自助样本的树中计算投票(即“K3”、“K7”、“K8”、“K9”)。如果还不清楚,请告诉我。 - Manoj Awasthi
1
现在,RF创建S棵树,并使用M个可能的特征中的m个随机子特征来创建任何一棵树。它不是用来创建整棵树,而是用来创建树中的每个节点。据我所知,每次必须创建一个分叉节点时,它会对m个特征进行采样。 - Juan
1
优秀的解释。也许值得一提的是:根据数据结构,OOB误差估计可以与仅使用部分数据进行训练时预测的误差不同。这可能会影响人们对适当数量的树的决策。例如,如果您的数据由来自100个单独实验的1000个数据点组成,则分类器的准确性将取决于只在实验1-80上进行训练并在81-100上进行验证或使用OOB方法,在所有100个实验中的所有数据点基本上是随机化的情况下。 - Mathews24
显示剩余7条评论

56

在布雷曼(Breiman)最初实现的随机森林算法中,每个决策树都是在大约总训练数据的2/3上训练的。由于随机森林是逐步构建的,因此每棵树可以在未使用该树构建的样本上进行测试(类似于留一交叉验证)。这就是袋外误差估计 - 随机森林正在构建时的内部误差估计。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接