# 机器学习中的装袋和随机森林集成算法

> 原文： [https://machinelearningmastery.com/bagging-and-random-forest-ensemble-algorithms-for-machine-learning/](https://machinelearningmastery.com/bagging-and-random-forest-ensemble-algorithms-for-machine-learning/)

随机森林是最流行和最强大的机器学习算法之一。它是一种称为Bootstrap Aggregation或bagging的集成机器学习算法。

在这篇文章中，您将发现Bagging集成算法和用于预测性建模的随机森林算法。阅读本文后，您将了解：

*   用于从样本估计统计量的自助方法。
*   Bootstrap Aggregation算法，用于从单个训练数据集创建多个不同的模型。
*   随机森林算法对Bagging做了一些小调整，产生了一个非常强大的分类器。

这篇文章是为开发人员编写的，并没有统计或数学方面的背景。该文章重点介绍了算法的工作原理以及如何将其用于预测性建模问题。

如果您有任何疑问，请发表评论，我会尽力回答。

让我们开始吧。

![Bagging and Random Forest Ensemble Algorithms for Machine Learning](img/fe96503a5f5ea1aafb65de137f9e6a7f.jpg)

用于机器学习的套袋和随机森林集成算法
照片由 [Nicholas A. Tonelli](https://www.flickr.com/photos/nicholas_t/9660920448/) 拍摄，保留一些权利。

## 自举法

在我们开始Bagging之前，让我们快速浏览一下名为bootstrap的重要基础技术。

引导程序是一种用于从数据样本中估计数量的强大统计方法。如果数量是描述性统计量（例如均值或标准差），则最容易理解。

假设我们有100个值（x）的样本，我们想要估计样本的平均值。

我们可以直接从样本计算平均值：

mean（x）= 1/100 * sum（x）

我们知道我们的样本很小，而且我们的平均值有错误。我们可以使用引导程序改进我们的均值估计：

1.  使用替换创建我们的数据集的许多（例如1000个）随机子样本（意味着我们可以多次选择相同的值）。
2.  计算每个子样本的平均值。
3.  计算所有收集平均值的平均值，并将其用作数据的估计平均值。

例如，假设我们使用了3个重采样并得到了平均值2.3,4.5和3.3。取这些数据的平均值，我们可以将估计的数据平均值设为3.367。

该过程可用于估计其他量，例如标准偏差，甚至是机器学习算法中使用的量，例如学习系数。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

## 引导聚合（套袋）

Bootstrap Aggregation（简称Bagging）是一种简单而强大的集成方法。

集合方法是将来自多个机器学习算法的预测组合在一起以比任何单个模型进行更准确的预测的技术。

Bootstrap Aggregation是一种通用过程，可用于减少具有高方差的算法的方差。具有高方差的算法是决策树，如分类和回归树（CART）。

决策树对它们所训练的特定数据敏感。如果训练数据被改变（例如，树在训练数据的子集上训练），则所得到的决策树可以是完全不同的，并且反过来预测可以是完全不同的。

Bagging是Bootstrap程序应用于高方差机器学习算法，通常是决策树。

假设我们有一个1000个实例（x）的样本数据集，我们正在使用CART算法。套袋CART算法将如下工作。

1.  使用替换创建我们的数据集的许多（例如100个）随机子样本。
2.  在每个样本上训练CART模型。
3.  给定新数据集，计算每个模型的平均预测。

例如，如果我们有5个袋装决策树对输入样本进行以下类预测：蓝色，蓝色，红色，蓝色和红色，我们将采用最频繁的类并预测蓝色。

在使用决策树进行装袋时，我们不太关心过拟合训练数据的单个树木。出于这个原因并且为了效率，各个决策树生长得很深（例如，树的每个叶节点处的训练样本很少）并且树没有被修剪。这些树将具有高方差和低偏差。当使用装袋组合预测时，这些是子模型的重要特征。

装袋决策树的唯一参数是样本数量，因此包括树木的数量。这可以通过在运行之后增加运行中的树的数量来选择，直到精度开始停止显示改进（例如，在交叉验证测试装置上）。非常多的模型可能需要很长时间来准备，但不会过拟合训练数据。

就像决策树本身一样，Bagging可用于分类和回归问题。

## 随机森林

随机森林是对袋装决策树的改进。

像CART这样的决策树的问题在于它们是贪婪的。他们使用最小化错误的贪婪算法选择要拆分的变量。因此，即使使用Bagging，决策树也可以具有许多结构相似性，并且反过来在它们的预测中具有高度相关性。

如果来自子模型的预测是不相关的或者最好是弱相关的，则将来自多个模型的预测组合在一起可以更好地工作。

随机森林改变算法以获得子树的学习方式，以便来自所有子树的结果预测具有较少的相关性。

这是一个简单的调整。在CART中，当选择分割点时，允许学习算法查看所有变量和所有变量值，以便选择最佳分割点。随机森林算法改变了该过程，使得学习算法仅限于要搜索的特征的随机样本。

必须将每个分割点（m）处可搜索的要素数指定为算法的参数。您可以尝试不同的值并使用交叉验证进行调整。

*   对于分类，一个好的默认值是：m = sqrt（p）
*   对于回归，一个好的默认值是：m = p / 3

其中m是可以在分裂点搜索的随机选择的特征的数量，p是输入变量的数量。例如，如果数据集有25个输入变量用于分类问题，那么：

*   m = sqrt（25）
*   m = 5

## 估计的表现

对于从训练数据中取得的每个bootstrap样本，将留下未包含的样本。这些样品称为Out-Of-Bag样品或OOB。

当平均时，每个模型在其左侧样本上的表现可以提供袋装模型的估计准确度。这种估计的表现通常称为OOB表现估计。

这些表现指标是可靠的测试误差估计，并与交叉验证估计相关联。

## 变量重要性

在构造Bagged决策树时，我们可以计算每个分裂点处变量的误差函数下降的程度。

在回归问题中，这可能是总和平方误差的下降，在分类中，这可能是基尼分数。

可以在所有决策树和输出中对这些误差下降进行平均，以估计每个输入变量的重要性。选择变量时下降越大，重要性越大。

这些输出可以帮助识别可能与问题最相关或最不相关的输入变量子集，并建议您可以在从数据集中删除某些特征的情况下执行的特征选择实验。

## 进一步阅读

套袋是一种简单的技术，在大多数介绍性机器学习文本中都有介绍。下面列出了一些示例。

*   [统计学习简介：在R](http://www.amazon.com/dp/1461471370?tag=inspiredalgor-20) 中的应用，第8章。
*   [Applied Predictive Modeling](http://www.amazon.com/dp/1461468485?tag=inspiredalgor-20) ，第8章和第14章。
*   [统计学习要素：数据挖掘，推理和预测](http://www.amazon.com/dp/0387848576?tag=inspiredalgor-20)，第15章

## 摘要

在这篇文章中，您发现了Bagging集合机器学习算法和称为随机森林的流行变体。你了解到：

*   如何从数据样本中估算统计量。
*   如何使用装袋​​来组合来自多个高方差模型的预测。
*   如何在装袋时调整决策树的构造以使其预测脱相关，这种技术称为随机森林。

您对此帖子或Bagging或Random Forest Ensemble算法有任何疑问吗？
发表评论并提出问题，我会尽力回答。