随机森林中的包装袋错误是什么?

csa*_*ive 54 language-agnostic classification machine-learning random-forest

随机森林中的包装袋错误是什么?它是在随机森林中找到正确数量的树的最佳参数吗?

Man*_*thi 141

我会尝试解释一下:

假设我们的训练数据集由T表示,并假设数据集具有M个特征(或属性或变量).

T = {(X1,y1), (X2,y2), ... (Xn, yn)}

Xi is input vector {xi1, xi2, ... xiM}

yi is the label (or output or class). 
Run Code Online (Sandbox Code Playgroud)

RF摘要:

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

  • 套袋
  • 随机子空间方法.

假设我们决定S在森林中拥有多个树,那么我们首先创建从T with-replacement中随机重新采样数据创建的S数据集"same size as original"(每个数据集n次).这将导致{T1, T2, ... TS}数据集.其中每个都称为引导数据集.由于"替换",每个数据集Ti都可能有重复的数据记录,而Ti可能会丢失原始数据集中的几个数据记录.这叫做Bootstrapping.(en.wikipedia.org/wiki/Bootstrapping_(statistics))

Bagging是获取bootstraps然后聚合在每个bootstrap上学习的模型的过程.

现在,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选择所有Tk不包括的分类器(Xi,yi).值得注意的是,这个子集是一组不包含原始数据集中特定记录的boostrap数据集.这个集合被称为袋外示例.存在n这样的子集(原始数据集T中的每个数据记录一个).OOB分类器仅仅是投票的聚合Tk,因此它不包含(xi,yi).

泛化误差的袋外估计是训练集上的袋外分类器的错误率(将其与已知yi的比较).

它为什么如此重要?对Breiman [1996b]中袋装分类器的误差估计的研究给出了经验证据,证明袋外估计与使用与训练集相同大小的测试集一样准确.因此,使用out-of-bag误差估计消除了对预留测试集的需要.

(感谢@Rudolf的更正.他的评论如下.)

  • 非常好的解释,但有一个小错误 - 替换采样,你称之为"Bagging",实际上命名为"Bootstrapping".(https://en.wikipedia.org/wiki/Bootstrapping_(statistics))Bagging是获取bootstraps然后聚合在每个bootstrap上学习的模型的过程.(https://en.wikipedia.org/wiki/Bootstrap_aggregating)) (7认同)
  • 嗨,Alex,基本上如上所述 - 我们创建了一个OOB分类器,一次只能获取一条记录(由所有可用的训练记录(由"T"表示)中的"(Xi,yi)"表示) - 查找所有引导样本或数据集这个记录丢失了(比如说'T3`,`T7`,`T8`,`T9`) - 我们通过我们的森林运行当前记录`(Xi,yi)`但是只计算与bootstrap样本对应的树的投票数没有这个记录(即`K3`,`K7`,`K8`,`K9`).如果还不清楚,请告诉我. (6认同)
  • 精彩的解释@Manoj Awasthi (4认同)
  • 谢谢@bourneli,我同意当答案简明扼要时有用性更好但我专注于将答案放在上下文中,这是最需要空间的. (4认同)
  • 很好的解释,如果更短的话会更好 (3认同)

eag*_*e34 46

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

  • 感谢您提供简洁明了的答案. (4认同)