基于森林的分类与回归工作原理

基于森林的分类与回归工具会根据作为部分训练数据集提供的已知值训练模型。 然后,可使用此预测模型来预测具有相同关联解释变量的预测数据集中的未知值。 工具使用随机森林算法的改编创建模型并生成预测,这是一种由 Leo Breiman 和 Adele Cutler 开发的监督机器学习方法。 该工具将创建可用于预测的许多决策树,称作集成或森林。 每棵树会生成其自己的预测,然后用作投票方案的一部分来进行最终预测。 最终预测不会基于任何单个树,而是基于整个森林。 使用整个森林,而不是单独的树有助于避免将模型与训练数据集过度拟合,就像使用组成森林的每棵树中训练数据的随机子集和解释变量的随机子集那样。

可能的应用

以下是此工具的潜在应用:

  • 给出有关海草是否存在的数据以及表示为属性和栅格的许多环境解释变量,除了距上游工厂和主要港口的距离之外,还可以根据对这些相同环境解释变量的未来预测来预测未来海草是否存在。
  • 假设您拥有全国数百个农场的作物产量数据、每个农场的其他属性(员工数量、占地面积等)以及代表坡度、高程、降雨量和每个农场温度的一系列栅格。 可使用这些数据提供代表您没有作物产量(但您确实拥有所有其他变量)的农场的要素集,然后对作物产量进行预测。
  • 可根据当年已售房屋的价格来预测房屋价值。 可使用已售房屋的售价以及有关卧室数量、距学校的距离、与主要高速公路的接近度、平均收入和犯罪计数的信息预测类似房屋的售价。
  • 可使用训练数据以及栅格图层(包括多个单独波段)与结果(例如 NDVI)的组合对土地使用类型进行分类。
  • 给出有关儿童血铅水平及其房屋的征税宗地 ID 的信息,结合宗地属性(例如房屋年龄)、人口普查数据(例如收入和教育水平)和反映铅和铅化合物的毒物排放的国家数据集,可以预测没有血铅水平数据的宗地的铅暴露风险。 此类风险预测可能会推动该地区的政策和教育计划。

训练模型

使用基于森林的分类与回归工具的第一步是训练模型以供预测。 训练会构建一个用于建立解释变量与要预测的变量参数之间的关系的森林。 无论您选择了仅训练选项还是训练并预测,首先,该工具会基于要预测的变量参数以及解释训练变量解释训练距离要素(适用于 Advanced 许可)和解释训练栅格(适用于 Spatial Analyst 许可)参数的任意组合构建模型。 该工具将评估已创建模型的性能并提供其他诊断。

默认情况下,为了进行验证,将从训练中排除 10% 的训练数据。 经过训练的模型将用于预测测试数据的值,然后将这些预测值与观测值进行比较,以基于训练过程中未包含的数据提供对预测精度的度量。 同时包括有关模型的其他诊断信息,例如森林特征、袋外 (OOB) 误差以及变量重要性的汇总。 下面将更详细地介绍这些输出。

可构建模型以预测要预测的变量是分类变量(分类)还是连续变量(回归)。 选中将变量视为分类变量时,构建的模型将基于分类树。 如果未选中,要预测的变量参数则被视为连续,构建的模型将基于回归树。

解释训练变量

用于训练森林模型的解释变量的最常见形式之一是同时包含要预测的变量参数的训练数据集中的字段。 这些字段可以是连续字段也可以是分类字段。 无论您选择预测连续变量还是分类变量,每个解释训练变量值都可以是连续变量或分类变量。 如果经过训练的模型也用于预测,则每个提供的解释训练变量必须适用于训练数据集和预测数据集。

解释训练距离要素

虽然基于森林的分类与回归不是空间机器学习工具,但仍可使用距离要素,达到在分析中利用空间能力的目的。 如果您正在对一系列零售店的业绩进行建模,要生成精确预测,表示距高速公路入口匝道的距离或距最近竞争对手的距离的变量可能至关重要。 同样,如果对空气质量进行建模,则表示距主要污染源的距离或距主要道路的距离的解释变量将至关重要。 通过计算从给定要素到输入训练要素参数的距离,可使用距离要素自动创建解释变量。 将计算每个输入解释训练距离要素与最近的输入训练要素的距离。 如果输入解释训练距离要素为面要素或线要素,则距离属性将计算为要素对的最近线段之间的距离。 但是,面要素和线要素的距离计算方式不同。 有关详细信息,请参阅邻域分析工具计算距离的方法

解释训练栅格

还可以使用解释训练栅格训练模型,它会显示数据源,包括影像、DEM、人口密度模型和环境测量。 仅当您拥有 Spatial Analyst 许可时,解释训练栅格参数才可用。 如果输入训练要素为点,该工具将向下钻取以提取每个点位置的解释变量。 对于多波段栅格,仅使用第一个波段。 对于镶嵌数据集,请首先使用创建镶嵌图层工具。

这些栅格可以是连续栅格也可以是分类栅格。 无论您选择预测连续变量还是分类变量,每个解释训练栅格都可以是连续变量或分类变量。

如果输入训练要素为面,要预测的变量为分类变量,并且正在使用解释训练栅格,则可使用将面转换为栅格分辨率以供训练选项。 如果选中此选项,则将在位于面内的每个栅格像元质心处将面划分成点,该面将被视为点数据集。 然后,提取每个点位置处的栅格值并将其用于训练模型。 不再基于该面对模型进行训练,而是基于针对每个像元质心提取的栅格值对模型进行训练。 对于数值变量,将使用双线性采样方法;对于分类变量,将使用最邻近方法。 经过转换的面要素的默认像元大小将为输入栅格的最大像元大小。 但是,可使用像元大小环境设置更改此值。 如果未选中此选项,则将在模型中针对每个面使用一个栅格值。 将为每个面指定连续栅格的平均值和分类栅格的众数。

面转换为栅格分辨率(左)或分配平均值(右)。

使用基于森林的模型进行预测

最好首先使用仅训练选项,评估分析结果,根据需要调整包含的变量和高级参数,找到优质模型后,重新运行该工具以预测要素或栅格。 继续进行预测时,最好将为进行验证排除的训练数据 (%) 参数更改为 0%,以便可以在用于预测的最终模型中包含所有可用训练数据。 可通过以下方式进行预测:

  • 在同一研究区域中进行预测

    • 当对同一研究区域中的要素进行预测时,每个预测要素必须包含所有关联解释变量(字段),以及与解释训练距离要素解释训练栅格的重叠范围。

    • 使用提供的解释训练栅格对同一研究区域中的栅格进行预测时,预测将为所有解释栅格的重叠范围。

  • 在不同研究区域中进行预测

    • 当对不同研究区域中的要素进行预测时,每个预测要素必须包含所有关联解释变量(字段),并且新解释距离要素和解释栅格必须与其对应的解释训练距离要素和栅格相匹配。 这些新距离要素和栅格必须适用于新的研究区域并与解释训练距离要素解释训练栅格对应。 例如,如果使用分类栅格训练模型,则对应的预测解释栅格不能具有不同的类别或明显不同的值范围。

    • 对不同研究区域中的栅格进行预测时,必须提供新的解释预测栅格并使其与对应的解释训练栅格匹配。 对应的预测解释栅格不能具有不同的类别或明显不同的值范围。 生成的输出预测栅格将为所有提供的解释预测栅格的重叠范围。

  • 通过将用于训练的解释变量与包含未来预测的变量进行匹配对不同时间段进行预测

    • 对未来时间段进行预测时,无论是预测要素还是栅格,每个预测的解释预测变量(字段、距离要素和栅格)都必须与对应的解释训练变量相匹配。

对要素进行预测

模型在使用解释训练变量解释训练距离要素解释训练栅格的任意组合训练后,即可用于预测相同或不同研究区域中的点或面。 对要素进行预测时,需要接收预测值的每个要素的每个字段、距离要素和提供的栅格都具有值。

如果 Input Training FeaturesInput Prediction Features 字段名称不匹配,则将提供变量匹配参数。 对解释变量进行匹配时,PredictionTraining 字段的类型必须相同(Training 中的双精度字段必须与 Prediction 中的双精度字段相匹配)。

如果需要使用未用于训练模型的距离要素或栅格,因为您正在不同的研究区域或不同的时间段内进行预测,则将提供匹配距离要素匹配解释栅格参数。

对栅格进行预测

使用仅经过解释训练栅格训练的模型,可以对相同或不同研究区域中的栅格进行预测。 如果需要使用未用于训练模型的预测栅格,因为您正在不同的研究区域或不同的时间段内进行预测,则将提供匹配解释栅格参数。 可使用 Spatial Analyst 许可通过将预测类型设置为预测栅格创建输出预测栅格

输出消息和诊断

该工具还会创建消息和图表,以帮助您了解模型的性能。 可将鼠标悬停在进度条上、单击弹出按钮或展开地理处理窗格中的消息部分来访问消息。 还可通过地理处理历史访问之前运行基于森林的分类和预测工具的消息。 这些消息包括有关模型特征、OOB 误差、变量重要性和验证诊断的信息。

模型特征表包含有关森林模型的许多重要方面的信息,其中一些内容通过高级森林选项中的参数进行选择,其中一些由数据驱动。 数据驱动森林特征对于了解何时优化模型性能非常重要。 “树深范围”用于显示在森林中发现的最小树深和在森林中发现的最大树深(最大值设置为参数,但低于该最大值的任何深度都可行)。 “平均树深”用于报告森林中树的平均深度。 如果最大深度设置为 100,但范围和平均深度表明大部分时间使用的深度要小得多,则较小的最大深度参数可以提高模型的性能,因为它会降低模型与训练数据过度拟合的可能性。 随机采样的变量数选项用于报告用于森林中任何给定树的随机选择变量数。 每棵树将具有不同的变量组合,但每个树都会使用该数量的变量。 默认选择的数量基于要素数和可用变量数的组合。 对于回归,该数量为解释变量(包括要素、栅格和距离要素)总数的三分之一。 对于分类,该数量为变量总数的平方根。

模型特征表

除了森林的基本特征之外,还提供了 OOB 误差,以帮助评估模型的精度。 介绍的均方误差 (MSE) 和变化百分比均基于模型根据训练数据集中的观察值精确预测要预测的变量值的能力。 OOB 是使用训练数据集包含的数据计算的预测误差,该数据对构成森林的树子集不可见。 如果您想要根据 100% 的数据训练模型,您需要依靠 OOB 来评估模型精度。 将报告树数量的一半和树总数对应的误差,用于帮助评估增加树数量是否可提高模型性能。 如果对于两个树数量,介绍的误差和变化百分比的值相似,则表明可以使用较少数量的树,从而尽可能减小对模型性能的影响。 但是,最好使用计算机允许的尽可能多的树。 森林中的树数量越多,生成的结果越稳定,模型的数据和采样方案中的噪点越少。

连续变量的 OOB 误差

如果要预测的变量值为分类变量(由将变量视为分类变量参数表示),则系统将基于森林中无法看到树子集的每个树木类别的不正确分类百分比来计算 OOB 误差。 每个类别的不正确 OOB 分类百分比都会打印在地理处理消息中。 此外,分类的 MSE 也将被打印出来,并且可将其解释为所有类别中不正确 OOB 分类的整体比例。 如果为树数参数使用较小的数字,则可能每棵树都无法看到来自一个或多个类别的任何训练数据。 在这种情况下,OOB 误差将为 100%。

分类变量的 OOB 误差

影响模型性能的另一个主要因素是所使用的解释变量。 最高变量重要性表列出了重要性得分排名前 20 的变量。 重要性通过基尼系数计算,可将其视为变量负责拆分的次数,以及该拆分除以树数量的影响。 拆分是决策树中的每个单独决策。 变量重要性可用于创建更简洁的模型,其中包含检测为有意义的变量。

最高变量重要性表
重要性列中的值是列出的每个变量所有树的基尼系数总和。 % 列中的值是基尼系数总和的百分比。

如果输出诊断表参数值已指定并且可从内容窗格进行访问,则将创建显示模型中使用的每个变量重要性的可选条形图。 该图表将在 y 轴上显示模型中使用的变量,并在 x 轴上显示其基于基尼系数的重要性。

变量重要性条形图

如果指定了验证的运行次数值,则将创建一个表示变量重要性的箱形图,而不是条形图。 箱形图显示了所有验证运行中变量重要性值的分布。 变量重要性的分布是训练森林模型稳定性的指标。 如果在验证运行过程中变量重要性发生了幅度较大的变化(在图中表示为较长的箱形),这可能表示随机森林模型不稳定。 可以通过增加树数来捕获数据中更多复杂的关系来改善不稳定的模型。

变量重要性是一种帮助您了解哪些变量正在驱动模型的结果的诊断方式,而不是用于衡量模型预测好坏的方式(例如回归模型中的 R2)。 最佳做法是通过将为进行验证排除的训练数据设置为 0,并浏览变量重要性箱形图来使用所有数据进行训练。 接下来,修改其他参数,如树数最大树深,然后浏览箱形图直到找到稳定的模型。 一旦对关于变量重要性的稳定模型进行了训练,则可以增加为进行验证排除的训练数据以确定模型的精度。 探索诊断消息中的 OOB 误差,确定模型的精度。 如果您得到了具有稳定变量重要性且具有较高精度的模型,则可以将验证的运行次数设置为 1,从而得到一个描绘模型最终变量重要性的条形图。

要评估模型的性能,另一个重要方法是使用该模型来预测未包含在模型训练中的要素的值。 默认情况下,此测试数据集是输入训练要素的 10%,可使用为进行验证排除的训练数据 (%) 参数对其进行控制。 OOB 的缺点之一是使用森林的子集(未使用训练数据集中的特定要素的树),而不是使用整个森林。 通过排除一些数据以供验证,可评估整个森林的误差度量。

预测连续变量时,会将每个测试要素的观测值与基于经过训练的模型的要素预测值进行比较,并报告相关的 R 平方、p 值和标准误差。 由于测试数据集的选择是随机的,因此每次运行整个训练过程时,这些诊断都会发生变化。 要创建每次运行时不会发生变化的模型,可在随机数生成器环境设置中设置一个种子。

回归诊断表

预测分类变量时,消息窗口中会同时报告灵敏度和精度。 这些诊断的计算需通过混淆矩阵完成,此类矩阵可跟踪所关注类别被正确和错误分类的每一个实例以及其他类别被错误分类为所关注类别的时间。 每个类别的灵敏度报告将显示为所观察类别已正确预测为该类别的要素的次数百分比。 例如,如果您正在预测陆地和水域且陆地的灵敏度为 1.00,则表明之前准确预测了本应标记为“陆地”的每个要素。 但是,如果水域要素之前被错误地标记为“陆地”,则此情况不会在陆地的灵敏度数字中反映出来。 但是,此情况会在水域的灵敏度数字中反映出来,因为这意味着其中一个水域要素未准确预测。

精度诊断既考虑了预测特定类别要素的精确程度,又考虑了其他类别被误分类为所关注类别的频率。 它给出了某一类别在该类别的混淆总数中被正确识别的频率预估。 如果对变量进行分类时只有两个类别可供选择,则每个类别的精度相同,但灵敏度可能不同。 如果对变量进行分类时有多个类别可供选择,则各个类别的灵敏度和精度均可能不同。

Classification diagnostics

还提供了相同的诊断,以对预测值与训练数据集的观察值进行比较。 此类诊断可帮助您了解模型与训练数据的拟合程度。

解释范围诊断可以帮助您评估用于培训、验证和预测的值是否足以产生优质模型并允许您信任其他模型诊断。 用于训练随机森林模型的数据对生成的分类和预测的质量有较大的影响。 理想情况下,训练数据应代表您正在建模的数据。 默认情况下,10% 的训练数据将被随机排除,从而生成输入训练要素的训练子集和验证子集。 “解释变量范围诊断”表可显示这些子集的最小值和最大值,且如果预测要素或栅格,则显示用于预测的数据。

解释变量范围诊断表

由于子集确定方式具有随机性,训练子集中的变量值可能不代表输入训练要素中的总体值。 对于每个连续解释变量,“训练份额”列可表示输入训练要素中训练子集的值和所有要素的值之间的重叠百分比。 例如,如果输入训练要素中变量 A 的值的范围为 1 到 100,且训练子集的值的范围为 50 到 100,则变量 A 的“训练份额”将为 0.50 或 50%。 对于变量 A,训练子集覆盖了输入训练要素值范围的 50%。 如果训练子集未覆盖模型中每个解释变量的输入训练要素中大范围的值,则其他模型诊断可能会出现偏差。 执行类似的计算以生成“验证份额”诊断。 重要的是,用于验证模型的值要尽可能多地覆盖用于训练模型的值的范围。 例如,如果训练子集中变量 B 的值的范围为 1 到 100,且验证子集的值的范围为 1 到 10,则变量 B 的“验证份额”将为 0.10 或 10%。 这一小范围的值可能全部是低值也可能全部是高值,因此可能导致其他诊断出现偏差。 如果验证子集保留所有低值,其他模型诊断(例如解释的 MSE 和变化百分比)实际上会报告模型对低值的预测程度,而不是输入训练要素中存在的完整值范围。

“预测份额”诊断尤为重要。 基于森林的模型不会进行外推;它们只能对训练模型时基于的值进行分类或预测。 “预测份额”是训练数据的值和预测数据的值之间重叠的百分比。 如果值小于零,则表示您正在尝试对未经训练的模型上的值进行预测。 如果值为 1,则表示训练子集中的值范围和用于预测的值范围是相等的。 如果值大于 1,则表示训练子集中的值范围大于用于预测的值范围。

以上三个份额诊断仅在子集的范围重合时才有效。 例如,如果变量 C 的验证子集的值的范围为 1 到 100,且训练子集的值的范围为 90 到 200,则它们的重叠百分比为 10%,但两者不具备重合范围。 在这种情况下,诊断标有星号以显示非重合范围。 检查最小值和最大值,以查看非重叠的范围和方向。 如果模型试图在训练数据范围之外进行预测,则预测份额将以加号 (+) 进行标记。

“解释变量范围诊断”表的可接受值没有绝对规则。 在给定的训练数据约束条件下,“训练份额”和“验证份额”应尽可能的高。 “预测份额”不应小于 1。 如果“验证份额”诊断较低,请考虑增加为进行验证排除的训练数据 (%) 参数的值。 此外,请考虑多次运行模型,并选择运行可平衡范围诊断最佳值的模型。 每次运行中使用的随机种子都将在消息中报告。

该工具还会生成大量的输出。 输出训练要素将包含模型中使用的所有输入训练要素解释训练变量。 对于回归,将基于预测的标准化残差在地图上绘制训练要素。 对于分类,训练要素的符号系统将以要素是否被正确分类为基础。 如果模型正确预测了已知类别,则要素将被标记为已正确分类;否则,要素将被标记为错误分类

训练要素的字段包括为每个解释训练栅格变量提取的栅格值,以及为每个解释训练距离要素变量计算的距离值。 可使用这些新字段重新运行分析的训练部分,无需每次都提取栅格值和计算距离值。 输出已训练要素还将包含所有要素(在训练中使用的要素以及为了测试排除的要素)的预测值,评估模型性能时这些预测值可能非常有用。 对于所有测试数据,输出已训练要素中的 trained_features 字段将具有值 0(表示未在训练中使用),对于所有训练数据则具有值 1。 使用此工具进行预测时,该工具将生成包含输出已预测要素值的新要素类或新的输出预测表面值(如果提供解释栅格)。

高级森林选项

森林方法的优势在于可捕获弱预测因子(或树)的共性,并将其结合起来创建强大的预测因子(森林)。 如果单数树持续捕获某一关系,则意味着数据中存在紧密的关系,即使模型不复杂也可以检测到该关系。 调整森林参数有助于创建大量的弱预测因子,从而形成强大的模型。 可通过减少在每棵树中使用的信息来创建弱预测因子。 要实现此目的,可通过对使用每棵树的小要素子集、每棵树的少量变量和低树深进行任意组合。 树数量用于控制创建的弱预测因子数,预测因子(树)越弱,则创建强大模型所需的树越多。

该工具中提供了以下高级训练和验证选项:

  • 树数量的默认值为 100。 通常,森林模型中的树数量越高,模型预测结果越精确,但是会增加模型计算的时间。
  • 最小叶大小指保留叶所需的最小观察次数(即树上不再进一步拆分的的终端节点)。 回归的默认最小值为 5,分类的默认值为 1。 对于非常大的数据集,增加这些数字将减少工具的运行时间。 对于非常小的叶大小(接近定义的最小值),数据中的森林容易出现噪点。 对于更稳定的模型,尝试增加最小叶大小
  • 最大树深指在树上向下进行的最大拆分数。 当使用较大的最大深度时,将创建更多的分割,这可能会增加过度拟合模型的可能性。 默认值由数据驱动,并且取决于所创建的树数以及所包含的变量数。 请注意,无法分割达到最小叶大小值的节点。 如果同时设置了最小叶大小最大树深,则将由最小叶大小决定树深。
  • 每棵树的可用数据 (%) 参数用于指定用于每个决策树的输入训练要素百分比。 默认值为 100% 的数据。 森林中的每个决策树都是使用可用训练数据的随机子集(约三分之二)创建的。 针对每棵决策树使用较低百分比的输入数据可以提高适用于大型数据集的工具的速度。
  • 随机采样的变量数 参数用于指定用于创建每个决策树的解释变量数。 森林中的每个决策树都是使用指定解释变量的随机子集创建的。 增大每棵决策树中使用的变量数将增大过度拟合模型的可能性,尤其是存在至少一个主导变量时更是如此。 如果要预测的变量是数值变量,通常的做法(以及工具使用的默认值)是使用解释变量(字段、距离要素和栅格)总数的平方根,或者如果要预测的变量是分类变量,则将解释变量(字段、距离要素和栅格)总数除以 3。
  • 为进行验证排除的训练数据 (%) 参数用于指定要保留为用于验证的测试数据集的输入训练要素百分比(介于 10% 到 50% 之间)。 将在没有此随机数据子集的情况下对模型进行训练,并将这些要素的观察值与预测值进行比较以验证模型性能。 默认值为 10%。
  • 选中计算不确定性参数时,工具将计算要预测的变量的每个预测值周围的 90% 预测区间。 如果预测类型仅训练对要素进行预测,则会将两个附加字段添加到输出训练要素输出预测要素。 这些字段以 _P05_P95 结尾,表示预测区间的上界和下界。 对于任何新观测点,在给定相同的解释变量的情况下,您可以以 90% 的置信度预测新观测值将落在区间内。 如果使用对栅格进行预测选项,则两个表示预测区间上界和下界的栅格将添加到内容窗格。 预测区间使用分位数回归森林进行计算。 在分位数回归森林中,不是仅保留森林中的最终预测,而是保存森林的每个叶片中的预测值,并将其用于构建预测值的分布。

最佳做法

以下是使用基于森林的分类与回归工具的最佳做法:

  • 应至少根据数百个要素对森林模型进行训练才能获得最佳结果,该模型不适用于非常小的数据集。
  • 尝试使用超出用于训练模型的解释变量范围的解释变量进行预测时,该工具可能性能不佳。 基于森林的模型不会进行外推,它们只能对训练模型时基于的值范围进行分类或预测。 基于高于或低于原始训练数据集范围的解释变量预测值时,模型将预测值位于原始数据集中最高值或最低值的附近。
  • 当从解释训练栅格中提取值并使用解释训练距离要素计算距离时,要提高性能,请考虑根据 100%的数据训练模型,而不排除数据以供验证,然后选择创建输出已训练要素。 下次运行该工具时,请使用输出已训练要素作为输入训练要素,并使用所有提取的值和距离作为解释训练变量,无需每次训练模型时都进行提取。 如果您选择这样做,请将树数量最大树深随机采样的变量数设置为 1,以创建一颗极小的占位树来快速准备数据以供分析。
  • 出于性能原因,使用预测类型参数的预测至栅格选项时,解释性训练距离要素参数不可用。 要将到要素的距离作为解释变量,请使用距离累积工具计算距离栅格,并将距离栅格包括在解释训练栅格参数中。

  • 虽然树数量参数默认值为 100,但是该数值不是数据驱动的。 除了这些变量的变化之外,所需的树数量会随解释变量之间的关系复杂性、数据集大小和要预测的变量而增加。
  • 增加森林值中的树数量并持续追踪 OOB 或分类错误。 要以最佳方式评估模型性能,建议至少将树数量值增加 3 倍,使之达到至少 500 棵树。
  • 工具执行时间对每棵树使用的变量数高度敏感。 如果每棵树使用的变量数较小,则会降低过度拟合的可能性,但是,要在每颗树使用的变量数较小时提高模型性能,一定要使用许多的树。
  • 要创建每次运行时不会发生变化的模型,可在随机数生成器环境设置中设置一个种子。 模型中仍然存在随机性,但运行之间的随机性会保持一致。

参考资料

Breiman, Leo. (1996). "Out-Of-Bag Estimation." Abstract.

Breiman, L. (1996). "Bagging predictors." Machine learning 24 (2): 123–140.

Breiman, Leo. (2001). "Random Forests." Machine Learning 45 (1): 5-32. https://doi.org/10.1023/A:1010933404324.

Breiman, L., J.H. Friedman, R.A. Olshen, and C.J. Stone. (2017). Classification and regression trees. New York: Routledge. Chapter 4.

Dietterich, T. G. (2000, June). "Ensemble methods in machine learning." In International workshop on multiple classifier systems,. 1–15. Springer, Berlin, Heidelberg.

Gini, C. 1912 1955. Variabilità e mutabilità. Reprinted in Memorie di metodologica statistica (eds. E. Pizetti and T. Salvemini). Rome: Libreria Eredi Virgilio Veschi.

Grömping, U. (2009). "Variable importance assessment in regression: linear regression versus random forest." The American Statistician 63 (4): 308–319.

Ho, T. K. (1995, August). "Random decision forests." In Document analysis and recognition, 1995., proceedings of the third international conference on Document Analysis and Recognition Vol. 1: 278-282. IEEE.

James, G., D. Witten, T. Hastie, and R. Tibshirani. (2013). An introduction to statistical learning Vol. 112. New York: springer.

LeBlanc, M. and R. Tibshirani. (1996). "Combining estimates in regression and classification." Journal of the American Statistical Association 91 (436): 1641–1650.

Loh, W. Y. and Y. S. Shih. (1997). "Split selection methods for classification trees." Statistica sinica, 815–840.

Meinshausen, Nicolai. "Quantile regression forests." Journal of Machine Learning Research 7. Jun (2006): 983-999.

Nadeau, C. and Y. Bengio. (2000). "Inference for the generalization error." In Advances in neural information processing systems, 307-313.

Strobl, C., A. L. Boulesteix, T. Kneib, T. Augustin, and A. Zeileis. (2008). "Conditional variable importance for random forests." BMC bioinformatics 9 (1): 307.

Zhou, Z. H. (2012). "Ensemble methods: foundations and algorithms." CRC press.