基于森林的分类与回归 (GeoAnalytics Desktop)

摘要

使用随机森林算法的改编创建模型并生成预测,这是一种由 Leo Breiman 和 Adele Cutler 开发的监督机器学习方法。 可以针对分类变量(分类)和连续变量(回归)执行预测。 解释变量可采用训练要素属性表中字段的形式。 除了基于训练数据对模型性能进行验证之外,还可以对要素进行预测。

使用情况

  • 该工具将创建数百棵树(称为决策树集成),从而创建可用于预测的模型。 将使用原始(训练)数据的随机生成部分创建每棵决策树。 每棵树可以生成自己的预测并对结果进行投票。 森林模型将考虑所有决策树的投票,以预测或分类未知样本的结果。 此功能非常重要,因为单棵树可能存在过度拟合模型的问题;但森林中的多棵树进行预测可解决与单棵树相关的过度拟合问题。

  • 可以在两种操作模式下使用此工具。 探索不同的解释变量和工具设置时,可以使用训练模式来评估不同模型的性能。 找到合适的模型后,您即可使用训练并预测模式。

  • 输入训练要素可以是表、点、线或面要素。 而且,此工具不能用于处理多点数据。

  • 此工具不支持包含仅日期或仅时间字段的输入。 在运行分析之前删除任何仅日期和仅时间字段。

  • 在预测或解释字段中具有一个或多个空值或空字符串值的要素将从输出中排除。 如有必要,您可以使用计算字段工具来修改值。

  • 此工具可根据以下操作模式生成各种输出:

    • 训练可生成以下两种输出:
      • 输出已训练要素 - 包含创建的模型中使用的所有输入训练要素以及模型中使用的所有解释变量。 还包含用于训练模型的所有要素的预测,这对于评估所创建模型的性能非常有用。
      • 工具汇总消息 - 用于帮助您了解所创建模型的性能的消息。 这些消息包括有关模型特征、变量重要性以及验证诊断的信息。
    • 训练并预测可生成以下三种输出:
      • 输出已训练要素 - 包含创建的模型中使用的所有输入训练要素以及模型中使用的所有解释变量。 还包含用于训练模型的所有要素的预测,这对于评估所创建模型的性能非常有用。
      • 输出预测要素 - 预测结果图层。 将预测应用于图层以使用从训练图层生成的模型进行预测(使用输入预测要素选项)。
      • 工具汇总消息 - 用于帮助您了解所创建模型的性能的消息。 这些消息包括有关模型特征、变量重要性以及验证诊断的信息。

  • 可以使用创建变量重要性表格参数创建一个表格,用于显示变量重要性的图表以进行评估。 消息窗口中还会报告前 20 个变量重要性值。

  • 解释变量可以来自字段,应包含各种值。 如果解释变量为分类变量,应选中分类复选框(将自动选中字符串类型的变量)。 尽管较小的类别数量可改善模型性能,但分类解释变量限于 60 个唯一值。 对于给定的数据大小,变量所包含的类别越多,则其影响模型的可能性越大,从而导致预测结果的有效性越低。

  • 对解释变量进行匹配时,训练字段预测字段 必须具有相同类型的字段(例如,训练字段中的双精度字段必须与预测字段中的双精度字段相匹配)。

  • 基于森林模型不会进行外推;只能对模型训练所使用的值进行分类或预测。 使用在目标要素和变量范围内的训练要素和解释变量来训练模型。 如果类别存在于训练要素中不存在的预测解释变量中,则该工具将失败。

  • 树数参数的默认值为 100。 增加森林模型中的树数将使模型预测更加精准,但是将增加模型计算的时间。

  • 支持训练单个图层和预测单个图层。 要将多个数据集合并为一个,请使用构建多变量格网从多变量格网丰富工具生成输入数据。

  • 此地理处理工具由 Spark 作为支持。 可在台式计算机上并行使用多个核来完成分析。 要了解有关运行分析的详细信息,请参阅 GeoAnalytics Desktop 工具的注意事项

  • 运行 GeoAnalytics Desktop 工具时,将在台式计算机上完成分析。 为获得最佳性能,应在桌面上提供数据。 如果使用的是托管要素图层,则建议您使用 ArcGIS GeoAnalytics Server。 如果您的数据不是本地数据,则运行工具需要更长时间。 要使用 ArcGIS GeoAnalytics Server 执行分析,请参阅 GeoAnalytics Tools

参数

标注说明数据类型
预测类型

指定工具的操作模式。 可以运行此工具来训练模型,以仅评估性能、预测要素或创建预测表面。

  • 仅训练将训练模型,但不会生成预测。 生成预测之前,可以使用此选项评估模型的精度。 此选项将在消息窗口和变量重要性图表中输出模型诊断。 这是默认设置
  • 训练和预测将针对要素生成预测或分类。 必须为训练要素和要预测的要素提供解释变量。 该选项的输出将为要素类、消息窗口中的模型诊断以及变量重要性的可选表格。
String
输入训练要素

包含要预测的变量参数以及解释训练变量字段的图层。

Table View
输出训练要素
(可选)

输出要素图层名称。

Table;Feature Class
要预测的变量
(可选)

输入训练要素参数中的变量,其中包含要用于训练模型的值。 该字段包含将用于在未知位置进行预测的变量的已知(训练)值。

Field
将变量视为分类变量
(可选)

指定要预测的变量是否为分类变量。

  • 选中 - 要预测的变量为分类变量,并且此工具将执行分类。
  • 未选中 - 要预测的变量为连续变量,并且此工具将执行回归。 这是默认设置。
Boolean
解释变量
(可选)

表示解释变量的字段列表,可帮助预测要预测的变量的值或类别。 对于任何表示类或类别(例如土地覆被或存在/不存在)的变量,请选中分类复选框。

Value Table
输入预测要素
(可选)

表示将进行预测的位置的要素图层。 此要素图层还必须包含作为字段提供的任何解释变量,这些字段对应于训练数据中使用的字段。

Table View
变量重要性表
(可选)

包含用于描述要在所创建模型中使用的每个解释变量的重要性的信息的表。

Table
输出预测要素
(可选)

将接收预测结果的输出要素类。

Table;Feature Class
匹配解释变量
(可选)

根据右侧输入训练要素以及左侧输入预测要素中其对应字段指定的解释变量列表。

Value Table
树数
(可选)

要在森林模型中创建的树的数量。 增大树数通常将产生更加精确的模型预测,但是将增加模型计算的时间。 默认树数为 100。

Long
最小叶子大小
(可选)

保留叶子(即未进一步进行分割的树上的终端节点)所需的最小观测值数。 回归的默认最小值为 5,分类的默认值为 1。 对于非常大的数据,增大这些数值将减少工具的运行时间。

Long
最大树深
(可选)

对树进行的最大分割数。 如果使用较大的最大深度,则将创建更多分割,这可能会增大过度拟合模型的可能性。 默认值由数据驱动,并且取决于所创建的树数以及所包含的变量数。

Long
每棵树的可用数据 (%)
(可选)

用于每棵决策树的输入训练要素的百分比。 默认值为 100% 的数据。 将根据指定数据的三分之二随机获取每棵树的样本。

可以使用可用训练数据的随机样本或子集(大约三分之二)来创建森林中的每棵决策树。 针对每棵决策树使用较低百分比的输入数据可以提高适用于大型数据集的工具的速度。

Long
随机采样的变量数
(可选)

用于创建每棵决策树的解释变量数。

森林中的每个决策树都是使用指定解释变量的随机子集创建的。 增大每棵决策树中使用的变量数将增大过度拟合模型的可能性,尤其是存在一个或多个主导变量时更是如此。 常用方法是:如果要预测的变量为数值,则使用解释变量总数的平方根;如果要预测的变量为分类变量,则将解释变量的总数除以 3。

Long
针对验证而排除的训练数据 (%)
(可选)

要保留为验证测试数据集的输入训练要素的百分比(介于 10% 和 50% 之间)。 将在没有此随机数据子集的情况下对模型进行训练,并将这些要素的观测值与预测值进行比较。 默认值为 10%。

Long

arcpy.geoanalytics.Forest(prediction_type, in_features, {output_trained_features}, {variable_predict}, {treat_variable_as_categorical}, {explanatory_variables}, {features_to_predict}, {variable_of_importance}, {output_predicted}, {explanatory_variable_matching}, {number_of_trees}, {minimum_leaf_size}, {maximum_tree_depth}, {sample_size}, {random_variables}, {percentage_for_validation})
名称说明数据类型
prediction_type

指定工具的操作模式。 可以运行此工具来训练模型,以仅评估性能、预测要素或创建预测表面。

  • TRAIN将训练模型,但不会生成预测。 生成预测之前,可以使用此选项评估模型的精度。 此选项将在消息窗口和变量重要性图表中输出模型诊断。 这是默认设置
  • TRAIN_AND_PREDICT将针对要素生成预测或分类。 必须为训练要素和要预测的要素提供解释变量。 该选项的输出将为要素类、消息窗口中的模型诊断以及变量重要性的可选表格。
String
in_features

包含 variable_predict 参数以及解释训练变量字段的要素类。

Table View
output_trained_features
(可选)

输出要素图层名称。

Table;Feature Class
variable_predict
(可选)

in_features 参数中的变量,其中包含要用于训练模型的值。 该字段包含将用于在未知位置进行预测的变量的已知(训练)值。

Field
treat_variable_as_categorical
(可选)
  • CATEGORICALvariable_predict 为分类变量,并且此工具将执行分类。
  • NUMERICvariable_predict 为连续变量,并且此工具将执行回归。 这是默认设置。
Boolean
explanatory_variables
[[Variable, Categorical],...]
(可选)

表示解释变量的字段列表,可帮助预测 variable_predict 的值或类别。 对于任何表示类或类别(例如土地覆被或存在/不存在)的变量,请使用 treat_variable_as_categorical 参数。 对于任何表示类或类别(例如土地覆被或存在/不存在)的变量,请指定变量为 true;如果变量为连续变量,请指定变量为 false

Value Table
features_to_predict
(可选)

表示将进行预测的位置的要素图层。 此要素图层还必须包含作为字段提供的任何解释变量,这些字段对应于训练数据中使用的字段。

Table View
variable_of_importance
(可选)

包含用于描述要在所创建模型中使用的每个解释变量的重要性的信息的表。

Table
output_predicted
(可选)

将接收预测结果的输出要素类。

Table;Feature Class
explanatory_variable_matching
[[Prediction, Training],...]
(可选)

根据右侧 in_features 以及左侧 features_to_predict 中其对应字段指定的 explanatory_variables 列表,例如 [["LandCover2000", "LandCover2010"], ["Income", "PerCapitaIncome"]]

Value Table
number_of_trees
(可选)

要在森林模型中创建的树的数量。 增大树数通常将产生更加精确的模型预测,但是将增加模型计算的时间。 默认树数为 100。

Long
minimum_leaf_size
(可选)

保留叶子(即未进一步进行分割的树上的终端节点)所需的最小观测值数。 回归的默认最小值为 5,分类的默认值为 1。 对于非常大的数据,增大这些数值将减少工具的运行时间。

Long
maximum_tree_depth
(可选)

对树进行的最大分割数。 如果使用较大的最大深度,则将创建更多分割,这可能会增大过度拟合模型的可能性。 默认值由数据驱动,并且取决于所创建的树数以及所包含的变量数。

Long
sample_size
(可选)

in_features 用于每棵决策树的的百分比。 默认值为 100% 的数据。 将根据指定数据的三分之二随机获取每棵树的样本。

可以使用可用训练数据的随机样本或子集(大约三分之二)来创建森林中的每棵决策树。 针对每棵决策树使用较低百分比的输入数据可以提高适用于大型数据集的工具的速度。

Long
random_variables
(可选)

用于创建每棵决策树的解释变量数。

森林中的每个决策树都是使用指定解释变量的随机子集创建的。 增大每棵决策树中使用的变量数将增大过度拟合模型的可能性,尤其是存在一个或多个主导变量时更是如此。 常用方法是:如果 variable_predict 为数值,则使用解释变量总数的平方根;如果 variable_predict 为分类变量,则将解释变量的总数除以 3。

Long
percentage_for_validation
(可选)

要保留为验证测试数据集的 in_features 的百分比(介于 10% 和 50% 之间)。 将在没有此随机数据子集的情况下对模型进行训练,并将这些要素的观测值与预测值进行比较。 默认值为 10%。

Long

代码示例

Forest 示例(Python 窗口)

以下 Python 窗口脚本演示了如何使用 Forest 函数。

在此脚本中,请对 1980 年的销售数据运行“森林”,并预测 1981 年的销售情况。

#-------------------------------------------------------------------------------
# Name: Forest.py
# Description: Run Forest on sales data from 1980 and predict for sales in 1981
#
# Requirements: Advanced License

# Import system modules
import arcpy
arcpy.env.workspace = "c:/data/commercial.gdb"   

# Set local variables
trainingDataset = "sales"
predictionDataset = "next_year"
outputName = "training"
outputPredictedName = "predicted"

# Run Forest
arcpy.geoanalytics.Forest(
    "TRAIN_AND_PREDICT", inputDataset, outputName, "PERIMETER", None, 
    "STORE_CATEGORY true;AVG_INCOME false;POPULATION false", None, 
    predictionDataset, 
    "STORE_CATEGORY STORE_CATEGORY;AVG_INCOME MEAN_INCOME;POPULATION POPULATION", 
    100, None, None, 120, None, 10)