跳到内容

超参数

本页面列出了学习器及其各自的超参数。

用法

使用 PythonTensorFlow Decision Forests API 时,超参数以构造函数参数形式提供。例如:

import ydf
model = ydf.RandomForestLearner(num_trees=1000).train(...)

import tensorflow_decision_forests as tfdf
model = tfdf.keras.RandomForestModel(num_trees=1000)

使用 C++CLI API 时,超参数在训练配置 protobuffer 中传递。例如:

learner: "RANDOM_FOREST"
[yggdrasil_decision_forests.model.random_forest.proto.random_forest_config] {
  num_trees: 1000
}

梯度提升树 (GRADIENT_BOOSTED_TREES)

一个 梯度提升树 (GBT),也称为梯度提升决策树 (GBDT) 或梯度提升机 (GBM),是一系列按顺序训练的浅层决策树。每棵树都被训练来预测并“纠正”先前训练的树的错误(更精确地说,每棵树预测损失相对于模型输出的梯度)。

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数模板

超参数模板是预配置的超参数集合,它们会更新为已找到的最佳值。与永不更改的默认值不同,超参数模板在 YDF 中提供新功能时会更新。可以使用 C++ 或 CLI API 手动复制超参数模板,或者在 Python 和 TensorFlow Decision Forests API 中将其作为 hyperparameter_template constructor 参数传递。

better_default@1

一种通常比默认参数更好且成本不高的配置。

  • growing_strategy: BEST_FIRST_GLOBAL

benchmark_rank1@1

我们基准测试中排名靠前的超参数,经过轻微修改以在合理时间内运行。

  • growing_strategy: BEST_FIRST_GLOBAL
  • categorical_algorithm: RANDOM
  • split_axis: SPARSE_OBLIQUE
  • sparse_oblique_normalization: MIN_MAX
  • sparse_oblique_num_projections_exponent: 1

超参数

adapt_subsample_for_maximum_training_duration

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 控制最大训练时长(如果设置)的应用方式。如果为 false,则训练在时间用尽时停止。如果为 true,则用于训练单个树的采样数据集的大小会动态调整,以便所有树都能在规定时间内训练完成。

allow_na_conditions

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则树训练会评估类型为 X is NA 的条件,即 X 缺失

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true,则在返回模型预测之前应用链接函数(也称为激活函数)(如果存在)。如果为 false,则返回链接函数之前的模型输出。
    例如,在二元分类的情况下,链接函数前的输出是逻辑值,而链接函数后的输出是概率。

categorical_algorithm

  • 类型: 类别型 默认值:: CART 可能值:: CART, ONE_HOT, RANDOM

  • 如何学习类别属性上的分裂。
    - CART:CART 算法。查找形式为“值 \in mask”的类别分裂。该解决方案对于二元分类、回归和排序是精确的。对于多类别分类是近似的。这是一个很好的首选算法。如果出现过拟合(数据集非常小,字典很大),“random”算法是一个不错的替代方案。
    - ONE_HOT:独热编码。查找形式为“属性 == 参数”的最优类别分裂。这种方法类似于(但更有效)将每个可能的类别值转换为布尔特征。提供此方法用于比较目的,通常比其他替代方案表现更差。
    - RANDOM:在一组随机候选中寻找最佳分裂。使用随机搜索找到形式为“值 \in mask”的类别分裂。此解决方案可视为 CART 算法的近似。此方法是 CART 的有力替代方案。该算法的灵感来自 2001 年“随机森林”一书中的“5.1 类别变量”部分。

categorical_set_split_greedy_sampling

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 对于类别集分裂,例如文本。类别值成为正集候选的概率。采样在每个节点上应用一次(即不在贪婪优化的每一步)。

categorical_set_split_max_num_items

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 对于类别集分裂,例如文本。最大项数(采样之前)。如果可用项更多,则忽略频率最低的项。更改此值类似于在加载数据集之前更改“max_vocab_count”,但有一个例外:使用 max_vocab_count 时,所有剩余项都会被分组到一个特殊的词汇外项中。使用 max_num_items 时,则不是这样。

categorical_set_split_min_item_frequency

  • 类型: 整数 默认值:: 1 可能值:: min:1

  • 对于类别集分裂,例如文本。考虑一个项所需的最小出现次数。

compute_permutation_variable_importance

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则在训练结束时使用验证数据集计算模型的置换变量重要性。启用此功能可能会显著增加训练时间。

cross_entropy_ndcg_truncation

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 交叉熵 NDCG 损失的截断(默认值 5)。仅与交叉熵 NDCG 损失一起使用,即 loss="XE_NDCG_MART"

dart_dropout

  • 类型: 实数 默认值: 0.01 可能值:: min:0 max:1

  • 使用 DART 时应用的 Dropout 率,即当 forest_extraction=DART 时。

early_stopping

  • 类型: 类别型 默认值:: LOSS_INCREASE 可能值:: NONE, MIN_LOSS_FINAL, LOSS_INCREASE

  • 早停通过验证数据集检测模型的过拟合并停止训练。如果未直接提供,则验证数据集会从训练数据集中提取(参见“validation_ratio”参数)。
    - NONE:不早停。所有 num_trees 都被训练并保留。
    - MIN_LOSS_FINAL:训练所有 num_trees。然后截断模型以最小化验证损失,即丢弃一些树以最小化验证损失。
    - LOSS_INCREASE:经典的早停。当验证损失在 early_stopping_num_trees_look_ahead 棵树内没有下降时停止训练。

early_stopping_initial_iteration

  • 类型: 整数 默认值:: 10 可能值:: min:0

  • 用于早停计算的第一次迭代的基于 0 的索引。增加此值可以防止由于学习器的初始迭代噪声而导致的过早停止。

early_stopping_num_trees_look_ahead

  • 类型: 整数 默认值:: 30 可能值:: min:1

  • 用于检测验证损失增加并触发早停的滚动树数量。

focal_loss_alpha

  • 类型: 实数 默认值: 0.5 可能值:: min:0 max:1

  • 实验性功能,默认值 0.5。Focal loss 的加权参数,正样本按 alpha 加权,负样本按 (1-alpha) 加权。默认值 0.5 表示没有激活类级别加权。仅与 focal loss 一起使用,即 loss="BINARY_FOCAL_LOSS"

focal_loss_gamma

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 实验性功能,默认值 2.0。Focal loss 中错误预测指数项的指数,对应于 https://arxiv.org/pdf/1708.02002.pdf 中的 gamma 参数。仅与 focal loss 一起使用,即 loss="BINARY_FOCAL_LOSS"

forest_extraction

  • 类型: 类别型 默认值:: MART 可能值:: MART, DART

  • 如何构建森林
    - MART:多重加性回归树(Multiple Additive Regression Trees)。构建 GBDT 的“经典”方式,即每棵树都试图“纠正”先前树的错误。
    - DART:Dropout 加性回归树(Dropout Additive Regression Trees)。在 http://proceedings.mlr.press/v38/korlakaivinayak15.pdf 中提出的对 MART 的修改。在这里,每棵树都试图“纠正”先前树的随机子集的错误。

goss_alpha

  • 类型: 实数 默认值: 0.2 可能值:: min:0 max:1

  • GOSS(基于梯度的单侧采样;参见“LightGBM: 一种高效的梯度提升决策树”)采样方法的 Alpha 参数。

goss_beta

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • GOSS(基于梯度的单侧采样)采样方法的 Beta 参数。

growing_strategy

  • 类型: 类别型 默认值:: LOCAL 可能值:: LOCAL, BEST_FIRST_GLOBAL

  • 如何生长树。
    - LOCAL:每个节点独立于其他节点进行分裂。换句话说,只要节点满足分裂“约束”(例如最大深度、最小观测数),节点就会分裂。这是生长决策树的“经典”方式。
    - BEST_FIRST_GLOBAL:选择树中所有节点中损失减少最多的节点进行分裂。此方法也称为“最优优先”或“叶子方向生长”。更多详情请参见 Shi 的“最优优先决策树学习”和 Friedman 的“加性逻辑回归:提升的统计观点”。

honest

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 在 Honest 树中,使用不同的训练样本来推断结构和叶子值。这种正则化技术用样本换取偏差估计。它可能会增加或降低模型的质量。参见 Athey 等人的“Generalized Random Forests”。在本文中,Honest 树使用不放回抽样的随机森林算法进行训练。

honest_fixed_separation

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 仅用于 Honest 树,即 honest=true 时。如果为 true,则为每棵树生成一个新的随机分隔。如果为 false,则对所有树使用相同的分隔(例如,在包含多棵树的梯度提升树中)。

honest_ratio_leaf_examples

  • 类型: 实数 默认值: 0.5 可能值:: min:0 max:1

  • 仅用于 Honest 树,即 honest=true 时。用于设置叶子值的样本比例。

in_split_min_examples_check

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否在分裂搜索中检查 min_examples 约束(即导致一个子节点样本数少于 min_examples 的分裂被视为无效),还是在分裂搜索之前检查(即只有当节点包含多于 min_examples 个样本时才能进行分裂)。如果为 false,则可能存在训练样本数少于 min_examples 的节点。

keep_non_leaf_label_distribution

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否保留非叶子节点的节点值(即训练样本标签的分布)。此信息在模型服务期间未使用,但可用于模型解释以及超参数调优。这可能会占用大量空间,有时甚至占模型大小的一半。

l1_regularization

  • 类型: 实数 默认值:: 0 可能值:: min:0

  • 应用于训练损失的 L1 正则化。影响树的结构和叶子值。

l2_categorical_regularization

  • 类型: 实数 默认值:: 1 可能值:: min:0

  • 应用于类别特征训练损失的 L2 正则化。影响树的结构和叶子值。

l2_regularization

  • 类型: 实数 默认值:: 0 可能值:: min:0

  • 应用于除类别特征外所有特征的训练损失的 L2 正则化。

lambda_loss

  • 类型: 实数 默认值:: 1 可能值:: min:0

  • 应用于某些训练损失函数的 Lambda 正则化。仅用于 NDCG 损失。

loss

  • 类型: 类别型 默认值:: DEFAULT 可能值:: DEFAULT, BINOMIAL_LOG_LIKELIHOOD, SQUARED_ERROR, MULTINOMIAL_LOG_LIKELIHOOD, LAMBDA_MART_NDCG5, XE_NDCG_MART, BINARY_FOCAL_LOSS, POISSON, MEAN_AVERAGE_ERROR, LAMBDA_MART_NDCG

  • 模型优化的损失函数。如果未指定(DEFAULT),则根据“任务”和标签统计信息自动选择损失函数。例如,如果 task=CLASSIFICATION 且标签有两个可能值,则损失函数将设置为 BINOMIAL_LOG_LIKELIHOOD。可能的值有:
    - DEFAULT:根据任务和标签统计信息自动选择损失函数。
    - BINOMIAL_LOG_LIKELIHOOD:二项对数似然。仅适用于二元分类。
    - SQUARED_ERROR:最小二乘损失。仅适用于回归。
    - POISSON:泊松对数似然损失。主要用于计数问题。仅适用于回归。
    - MULTINOMIAL_LOG_LIKELIHOOD:多项对数似然,即交叉熵。仅适用于二元或多类别分类。
    - LAMBDA_MART_NDCG:带 NDCG@5 的 LambdaMART。
    - XE_NDCG_MART:交叉熵损失 NDCG。参见 arxiv.org/abs/1911.09798。
    - BINARY_FOCAL_LOSS:Focal loss。仅适用于二元分类。参见 https://arxiv.org/pdf/1708.02002.pdf。
    - POISSON:泊松对数似然。仅适用于回归。
    - MEAN_AVERAGE_ERROR:平均绝对误差,也称为 MAE。
    - LAMBDA_MART_NDCG5:已弃用,请使用 LAMBDA_MART_NDCG。带 NDCG@5 的 LambdaMART。

max_depth

  • 类型: 整数 默认值:: 6 可能值:: min:-1

  • 树的最大深度。max_depth=1 表示所有树都将是根节点。max_depth=-1 表示树的深度不受此参数限制。值 <= -2 将被忽略。

max_num_nodes

  • 类型: 整数 默认值:: 31 可能值:: min:-1

  • 树中的最大节点数。设置为 -1 可禁用此限制。仅适用于 growing_strategy=BEST_FIRST_GLOBAL

maximum_model_size_in_memory_in_bytes

  • 类型: 实数 默认值:: -1

  • 限制模型存储在内存中的大小。不同的算法可能以不同方式强制执行此限制。请注意,当模型被编译成推理引擎时,推理引擎的大小通常比原始模型小得多。

maximum_training_duration_seconds

  • 类型: 实数 默认值:: -1

  • 模型的最长训练时长,以秒为单位。每个学习算法都可以根据需要自由使用此参数。启用最长训练时长会使模型训练变得不确定。

mhld_oblique_max_num_attributes

  • 类型: 整数 默认值:: 4 可能值:: min:1

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。投影中的最大属性数。增加此值会增加训练时间。减小此值起正则化作用。该值应在 [2, num_numerical_features] 范围内。如果该值超过数值特征总数,则会自动封顶。允许值为 1,但会导致普通(非斜)分裂。

mhld_oblique_sample_attributes

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。如果为 true,则应用由“num_candidate_attributes”或“num_candidate_attributes_ratio”参数控制的属性抽样。如果为 false,则测试所有属性。

min_examples

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 节点中的最小样本数。

missing_value_policy

  • 类型: 类别型 默认值:: GLOBAL_IMPUTATION 可能值:: GLOBAL_IMPUTATION, LOCAL_IMPUTATION, RANDOM_LOCAL_IMPUTATION

  • 处理缺失属性值的方法。
    - GLOBAL_IMPUTATION:缺失属性值通过在整个数据集上计算的均值(数值属性)或最频繁项(类别属性)进行填充(即数据规范中包含的信息)。
    - LOCAL_IMPUTATION:缺失属性值通过在当前节点中训练样本上评估的均值(数值属性)或最频繁项(类别属性)进行填充。
    - RANDOM_LOCAL_IMPUTATION:缺失属性值通过从当前节点中训练样本中随机抽样的值进行填充。Clinic 等人在“Random Survival Forests”中提出了此方法 (https://projecteuclid.org/download/pdfview_1/euclid.aoas/1223908043)。

ndcg_truncation

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • NDCG 损失的截断(默认值 5)。仅与 NDCG 损失一起使用,即 loss="LAMBDA_MART_NDCG"

num_candidate_attributes

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 每个节点测试的唯一有效属性数量。如果属性至少有一个有效分裂,则该属性是有效的。如果 num_candidate_attributes=0,则该值设置为随机森林的经典默认值:分类时为 sqrt(输入属性数量),回归时为 输入属性数量 / 3。如果 num_candidate_attributes=-1,则测试所有属性。

num_candidate_attributes_ratio

  • 类型: 实数 默认值:: -1 可能值:: min:-1 max:1

  • 每个节点测试的属性比例。如果设置,则等价于 num_candidate_attributes = 输入特征数量 x num_candidate_attributes_ratio。可能的值介于 ]0, 1] 以及 -1。如果未设置或等于 -1,则使用 num_candidate_attributes

num_trees

  • 类型: 整数 默认值:: 300 可能值:: min:0

  • 最大决策树数量。如果启用早停,实际训练的树数量可能会更少。

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。

sampling_method

  • 类型: 类别型 默认值:: RANDOM 可能值:: NONE, RANDOM, GOSS, SELGB

  • 控制用于训练单个树的数据集的采样。
    - NONE:不应用采样。这等价于使用“subsample=1”的 RANDOM 采样。
    - RANDOM(默认):均匀随机采样。如果设置了“subsample”,则自动选择。
    - GOSS:基于梯度的单侧采样。如果设置了“goss_alpha”或“goss_beta”,则自动选择。
    - SELGB:选择性梯度提升。如果设置了“selective_gradient_boosting_ratio”,则自动选择。仅适用于排序任务。

selective_gradient_boosting_ratio

  • 类型: 实数 默认值: 0.01 可能值:: min:0 max:1

  • 用于选择性梯度提升(用于有效学习排序的选择性梯度提升;Lucchese 等人;http://quickrank.isti.cnr.it/selective-data/selective-SIGIR2018.pdf)采样方法中训练单个树的数据集比例。

shrinkage

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 应用于每棵树预测的系数。小值 (0.02) 通常会给出更准确的结果(假设训练了足够多的树),但会导致模型更大。类似于神经网络的学习率。对于 DART 模型固定为 1.0。

sorting_strategy

  • 类型: 类别型 默认值:: PRESORT 可能值:: IN_NODE, PRESORT, FORCE_PRESORT, AUTO

  • 为了找到分裂,数值特征如何排序
    - AUTO:在 IN_NODE, FORCE_PRESORT, 和 LAYER 中选择最有效的方法。
    - IN_NODE:特征在使用前在节点内进行排序。此解决方案速度较慢但内存占用少。
    - FORCE_PRESORT:特征在训练开始时预排序。此解决方案速度更快,但比 IN_NODE 消耗更多内存。
    - PRESORT:在 FORCE_PRESORT 和 IN_NODE 之间自动选择。
    .

sparse_oblique_max_num_projections

  • 类型: 整数 默认值:: 6000 可能值:: min:1

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。最大投影数(在 num_projections_exponent 之后应用)。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。增加“max_num_projections”会增加训练时间,但不影响推理时间。在模型开发的后期阶段,如果每一点准确度都很重要,请增加此值。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)未定义此超参数。

sparse_oblique_normalization

  • 类型: 类别型 默认值:: NONE 可能值:: NONE, STANDARD_DEVIATION, MIN_MAX

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。在应用稀疏斜投影之前,对特征应用的归一化。
    - NONE:不归一化。
    - STANDARD_DEVIATION:根据整个训练数据集上估计的标准差对特征进行归一化。也称为 Z-Score 归一化。
    - MIN_MAX:根据整个训练数据集上估计的范围(即最大值-最小值)对特征进行归一化。

sparse_oblique_num_projections_exponent

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。控制在每个节点测试的随机投影数量。
    增加此值很可能提高模型质量,显著增加训练时间,但不影响推理时间。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。因此,增加此 num_projections_exponent 和可能的 max_num_projections 可能会提高模型质量,但也会显著增加训练时间。
    请注意,(经典) 随机森林的复杂度大致与 num_projections_exponent=0.5 成正比,因为它考虑 sqrt(特征数) 来进行分裂。(经典) GBDT 的复杂度大致与 num_projections_exponent=1 成正比,因为它考虑所有特征来进行分裂。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)建议值在 [1/4, 2] 范围内。

sparse_oblique_projection_density_factor

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 投影密度作为特征数量的指数。对于每个投影,每个特征都有“projection_density_factor / num_features”的概率被考虑在投影中。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)称此参数为 lambda,并建议值在 [1, 5] 范围内。
    增加此值会增加训练和推理时间(平均而言)。此值最好针对每个数据集进行调优。

sparse_oblique_weights

  • 类型: 类别型 默认值:: BINARY 可能值:: BINARY, CONTINUOUS

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。可能的值
    - BINARY:斜权重在 {-1,1} 中采样(默认)。
    - CONTINUOUS:斜权重在 [-1,1] 中采样。

split_axis

  • 类型: 类别型 默认值:: AXIS_ALIGNED 可能值:: AXIS_ALIGNED, SPARSE_OBLIQUE, MHLD_OBLIQUE

  • 数值特征考虑的分裂结构。
    - AXIS_ALIGNED:轴对齐分裂(即一次一个条件)。这是训练树的“经典”方式。默认值。
    - SPARSE_OBLIQUE:稀疏斜分裂(即在少量特征上进行随机分裂),出自“Sparse Projection Oblique Random Forests”,Tomita 等,2020。
    - MHLD_OBLIQUE:多类别 Hellinger 线性判别分裂,出自“Classification Based on Multivariate Contrast Patterns”,Canete-Sifuentes 等,2029。

subsample

  • 类型: 实数 默认值:: 1 可能值:: min:0 max:1

  • 用于随机抽样方法中训练单个树的数据集比例(不放回抽样)。如果“subsample”设置了,并且“sampling_method”未设置或设置为“NONE”,则“sampling_method”会隐式设置为“RANDOM”。换句话说,要启用随机子抽样,只需要设置“subsample”。

uplift_min_examples_in_treatment

  • 类型: 整数 默认值:: 5 可能值:: min:0

  • 仅用于 Uplift 模型。节点中每个处理组的最小样本数。

uplift_split_score

  • 类型: 类别型 默认值:: KULLBACK_LEIBLER 可能值:: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED

  • 仅用于 Uplift 模型。分裂器评分,即分裂器优化的评分。这些评分在 Rzepakowski 等人的“用于单处理和多处理 Uplift 建模的决策树”中介绍。符号:p 表示阳性结果的概率/平均值,q 表示控制组的概率/平均值。
    - KULLBACK_LEIBLERKL:- p log (p/q)
    - EUCLIDEAN_DISTANCEED:(p-q)^2
    - CHI_SQUAREDCS:(p-q)^2/q

use_goss

  • 类型: 类别型 默认值: false 可能值:: true, false

use_hessian_gain

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则使用包含 Hessian 项的分裂增益公式,即优化分裂以最小化“梯度/Hessian”的方差。适用于除回归之外的所有损失函数。

validation_interval_in_trees

  • 类型: 整数 默认值:: 1 可能值:: min:1

  • 每隔“validation_interval_in_trees”棵树在验证集上评估模型。增加此值会减少验证成本,并可能影响早停策略(因为早停仅在验证期间进行测试)。

validation_ratio

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 如果在未提供验证数据集的情况下,则使用训练数据集的该比例进行验证。验证数据集(无论是直接提供还是从训练数据集中提取)用于计算验证损失、其他验证指标,并可能触发早期停止(如果启用)。当禁用早期停止时,验证数据集仅用于监控,不直接影响模型。如果 "validation_ratio" 设置为 0,则禁用早期停止(即相当于设置 early_stopping=NONE)。

RANDOM_FOREST

一个 随机森林 (Random Forest) 是一系列深度 CART 决策树的集合,它们独立训练且不进行剪枝。每棵树都在原始训练数据集的随机子集上进行训练(有放回采样)。

该算法的独特之处在于它对过拟合具有鲁棒性,即使在极端情况下也是如此,例如当特征数量多于训练样本数量时。

它可能是决策森林训练算法中最广为人知的一种。

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数模板

超参数模板是预配置的超参数集合,它们会更新为已找到的最佳值。与永不更改的默认值不同,超参数模板在 YDF 中提供新功能时会更新。可以使用 C++ 或 CLI API 手动复制超参数模板,或者在 Python 和 TensorFlow Decision Forests API 中将其作为 hyperparameter_template constructor 参数传递。

better_default@1

一种通常比默认参数更好且成本不高的配置。

  • winner_take_all: true

benchmark_rank1@1

我们基准测试中排名靠前的超参数,经过轻微修改以在合理时间内运行。

  • winner_take_all: true
  • categorical_algorithm: RANDOM
  • split_axis: SPARSE_OBLIQUE
  • sparse_oblique_normalization: MIN_MAX
  • sparse_oblique_num_projections_exponent: 1

超参数

adapt_bootstrap_size_ratio_for_maximum_training_duration

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 控制如何应用最大训练时长(如果设置)。如果为 false,则达到时长限制时训练停止。如果为 true,则调整用于训练每棵树的采样数据集大小,使得 num_trees 可以在 maximum_training_duration 内训练完成。如果未指定最大训练时长,则无效。

allow_na_conditions

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则树训练会评估类型为 X is NA 的条件,即 X 缺失

bootstrap_size_ratio

  • 类型: 实数 默认值:: 1 可能值:: min:0

  • 用于训练每棵树的样本数量;表示为训练数据集大小的比例。

bootstrap_training_dataset

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true(默认),则每棵树都在从原始数据集中有放回抽样的独立数据集上进行训练。如果为 false,则所有树都在整个相同数据集上进行训练。如果 bootstrap_training_dataset:false,则 OOB 指标不可用。bootstrap_training_dataset=false 用于“极端随机树”(https://link.springer.com/content/pdf/10.1007%2Fs10994-006-6226-1.pdf)。

categorical_algorithm

  • 类型: 类别型 默认值:: CART 可能值:: CART, ONE_HOT, RANDOM

  • 如何学习类别属性上的分裂。
    - CART:CART 算法。查找形式为“值 \in mask”的类别分裂。该解决方案对于二元分类、回归和排序是精确的。对于多类别分类是近似的。这是一个很好的首选算法。如果出现过拟合(数据集非常小,字典很大),“random”算法是一个不错的替代方案。
    - ONE_HOT:独热编码。查找形式为“属性 == 参数”的最优类别分裂。这种方法类似于(但更有效)将每个可能的类别值转换为布尔特征。提供此方法用于比较目的,通常比其他替代方案表现更差。
    - RANDOM:在一组随机候选中寻找最佳分裂。使用随机搜索找到形式为“值 \in mask”的类别分裂。此解决方案可视为 CART 算法的近似。此方法是 CART 的有力替代方案。该算法的灵感来自 2001 年“随机森林”一书中的“5.1 类别变量”部分。

categorical_set_split_greedy_sampling

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 对于类别集分裂,例如文本。类别值成为正集候选的概率。采样在每个节点上应用一次(即不在贪婪优化的每一步)。

categorical_set_split_max_num_items

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 对于类别集分裂,例如文本。最大项数(采样之前)。如果可用项更多,则忽略频率最低的项。更改此值类似于在加载数据集之前更改“max_vocab_count”,但有一个例外:使用 max_vocab_count 时,所有剩余项都会被分组到一个特殊的词汇外项中。使用 max_num_items 时,则不是这样。

categorical_set_split_min_item_frequency

  • 类型: 整数 默认值:: 1 可能值:: min:1

  • 对于类别集分裂,例如文本。考虑一个项所需的最小出现次数。

compute_oob_performances

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true,则计算 Out-of-bag 评估(在 summary 和 model inspector 中可用)。此评估是交叉验证评估的廉价替代方案。

compute_oob_variable_importances

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则计算 Out-of-bag 特征重要性(在 summary 和 model inspector 中可用)。请注意,OOB 特征重要性的计算可能很昂贵。

growing_strategy

  • 类型: 类别型 默认值:: LOCAL 可能值:: LOCAL, BEST_FIRST_GLOBAL

  • 如何生长树。
    - LOCAL:每个节点独立于其他节点进行分裂。换句话说,只要节点满足分裂“约束”(例如最大深度、最小观测数),节点就会分裂。这是生长决策树的“经典”方式。
    - BEST_FIRST_GLOBAL:选择树中所有节点中损失减少最多的节点进行分裂。此方法也称为“最优优先”或“叶子方向生长”。更多详情请参见 Shi 的“最优优先决策树学习”和 Friedman 的“加性逻辑回归:提升的统计观点”。

honest

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 在 Honest 树中,使用不同的训练样本来推断结构和叶子值。这种正则化技术用样本换取偏差估计。它可能会增加或降低模型的质量。参见 Athey 等人的“Generalized Random Forests”。在本文中,Honest 树使用不放回抽样的随机森林算法进行训练。

honest_fixed_separation

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 仅用于 Honest 树,即 honest=true 时。如果为 true,则为每棵树生成一个新的随机分隔。如果为 false,则对所有树使用相同的分隔(例如,在包含多棵树的梯度提升树中)。

honest_ratio_leaf_examples

  • 类型: 实数 默认值: 0.5 可能值:: min:0 max:1

  • 仅用于 Honest 树,即 honest=true 时。用于设置叶子值的样本比例。

in_split_min_examples_check

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否在分裂搜索中检查 min_examples 约束(即导致一个子节点样本数少于 min_examples 的分裂被视为无效),还是在分裂搜索之前检查(即只有当节点包含多于 min_examples 个样本时才能进行分裂)。如果为 false,则可能存在训练样本数少于 min_examples 的节点。

keep_non_leaf_label_distribution

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否保留非叶子节点的节点值(即训练样本标签的分布)。此信息在模型服务期间未使用,但可用于模型解释以及超参数调优。这可能会占用大量空间,有时甚至占模型大小的一半。

max_depth

  • 类型: Integer 默认值: 16 可能值: min:-1

  • 树的最大深度。max_depth=1 表示所有树都将是根节点。max_depth=-1 表示树的深度不受此参数限制。值 <= -2 将被忽略。

max_num_nodes

  • 类型: 整数 默认值:: 31 可能值:: min:-1

  • 树中的最大节点数。设置为 -1 可禁用此限制。仅适用于 growing_strategy=BEST_FIRST_GLOBAL

maximum_model_size_in_memory_in_bytes

  • 类型: 实数 默认值:: -1

  • 限制模型存储在内存中的大小。不同的算法可能以不同方式强制执行此限制。请注意,当模型被编译成推理引擎时,推理引擎的大小通常比原始模型小得多。

maximum_training_duration_seconds

  • 类型: 实数 默认值:: -1

  • 模型的最长训练时长,以秒为单位。每个学习算法都可以根据需要自由使用此参数。启用最长训练时长会使模型训练变得不确定。

mhld_oblique_max_num_attributes

  • 类型: 整数 默认值:: 4 可能值:: min:1

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。投影中的最大属性数。增加此值会增加训练时间。减小此值起正则化作用。该值应在 [2, num_numerical_features] 范围内。如果该值超过数值特征总数,则会自动封顶。允许值为 1,但会导致普通(非斜)分裂。

mhld_oblique_sample_attributes

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。如果为 true,则应用由“num_candidate_attributes”或“num_candidate_attributes_ratio”参数控制的属性抽样。如果为 false,则测试所有属性。

min_examples

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 节点中的最小样本数。

missing_value_policy

  • 类型: 类别型 默认值:: GLOBAL_IMPUTATION 可能值:: GLOBAL_IMPUTATION, LOCAL_IMPUTATION, RANDOM_LOCAL_IMPUTATION

  • 处理缺失属性值的方法。
    - GLOBAL_IMPUTATION:缺失属性值通过在整个数据集上计算的均值(数值属性)或最频繁项(类别属性)进行填充(即数据规范中包含的信息)。
    - LOCAL_IMPUTATION:缺失属性值通过在当前节点中训练样本上评估的均值(数值属性)或最频繁项(类别属性)进行填充。
    - RANDOM_LOCAL_IMPUTATION:缺失属性值通过从当前节点中训练样本中随机抽样的值进行填充。Clinic 等人在“Random Survival Forests”中提出了此方法 (https://projecteuclid.org/download/pdfview_1/euclid.aoas/1223908043)。

num_candidate_attributes

  • 类型: Integer 默认值: 0 可能值: min:-1

  • 每个节点测试的唯一有效属性数量。如果属性至少有一个有效分裂,则该属性是有效的。如果 num_candidate_attributes=0,则该值设置为随机森林的经典默认值:分类时为 sqrt(输入属性数量),回归时为 输入属性数量 / 3。如果 num_candidate_attributes=-1,则测试所有属性。

num_candidate_attributes_ratio

  • 类型: 实数 默认值:: -1 可能值:: min:-1 max:1

  • 每个节点测试的属性比例。如果设置,则等价于 num_candidate_attributes = 输入特征数量 x num_candidate_attributes_ratio。可能的值介于 ]0, 1] 以及 -1。如果未设置或等于 -1,则使用 num_candidate_attributes

num_oob_variable_importances_permutations

  • 类型: 整数 默认值:: 1 可能值:: min:1

  • 为了计算置换变量重要性,数据集重新洗牌的次数。增加此值会增加训练时间(如果 "compute_oob_variable_importances:true"),也会增加 oob 变量重要性指标的稳定性。

num_trees

  • 类型: 整数 默认值:: 300 可能值:: min:0

  • 个体决策树的数量。增加树的数量可以提高模型质量,但会增加模型大小、训练速度和推理延迟。

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。

sampling_with_replacement

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true,则有放回地抽取训练样本。如果为 false,则无放回地抽取训练样本。仅在 "bootstrap_training_dataset=true" 时使用。如果为 false(无放回抽样)并且 "bootstrap_size_ratio=1"(默认),则所有样本都用于训练所有树(这可能不是你想要的)。

sorting_strategy

  • 类型: 类别型 默认值:: PRESORT 可能值:: IN_NODE, PRESORT, FORCE_PRESORT, AUTO

  • 为了找到分裂,数值特征如何排序
    - AUTO:在 IN_NODE, FORCE_PRESORT, 和 LAYER 中选择最有效的方法。
    - IN_NODE:特征在使用前在节点内进行排序。此解决方案速度较慢但内存占用少。
    - FORCE_PRESORT:特征在训练开始时预排序。此解决方案速度更快,但比 IN_NODE 消耗更多内存。
    - PRESORT:在 FORCE_PRESORT 和 IN_NODE 之间自动选择。
    .

sparse_oblique_max_num_projections

  • 类型: 整数 默认值:: 6000 可能值:: min:1

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。最大投影数(在 num_projections_exponent 之后应用)。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。增加“max_num_projections”会增加训练时间,但不影响推理时间。在模型开发的后期阶段,如果每一点准确度都很重要,请增加此值。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)未定义此超参数。

sparse_oblique_normalization

  • 类型: 类别型 默认值:: NONE 可能值:: NONE, STANDARD_DEVIATION, MIN_MAX

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。在应用稀疏斜投影之前,对特征应用的归一化。
    - NONE:不归一化。
    - STANDARD_DEVIATION:根据整个训练数据集上估计的标准差对特征进行归一化。也称为 Z-Score 归一化。
    - MIN_MAX:根据整个训练数据集上估计的范围(即最大值-最小值)对特征进行归一化。

sparse_oblique_num_projections_exponent

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。控制在每个节点测试的随机投影数量。
    增加此值很可能提高模型质量,显著增加训练时间,但不影响推理时间。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。因此,增加此 num_projections_exponent 和可能的 max_num_projections 可能会提高模型质量,但也会显著增加训练时间。
    请注意,(经典) 随机森林的复杂度大致与 num_projections_exponent=0.5 成正比,因为它考虑 sqrt(特征数) 来进行分裂。(经典) GBDT 的复杂度大致与 num_projections_exponent=1 成正比,因为它考虑所有特征来进行分裂。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)建议值在 [1/4, 2] 范围内。

sparse_oblique_projection_density_factor

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 投影密度作为特征数量的指数。对于每个投影,每个特征都有“projection_density_factor / num_features”的概率被考虑在投影中。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)称此参数为 lambda,并建议值在 [1, 5] 范围内。
    增加此值会增加训练和推理时间(平均而言)。此值最好针对每个数据集进行调优。

sparse_oblique_weights

  • 类型: 类别型 默认值:: BINARY 可能值:: BINARY, CONTINUOUS

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。可能的值
    - BINARY:斜权重在 {-1,1} 中采样(默认)。
    - CONTINUOUS:斜权重在 [-1,1] 中采样。

split_axis

  • 类型: 类别型 默认值:: AXIS_ALIGNED 可能值:: AXIS_ALIGNED, SPARSE_OBLIQUE, MHLD_OBLIQUE

  • 数值特征考虑的分裂结构。
    - AXIS_ALIGNED:轴对齐分裂(即一次一个条件)。这是训练树的“经典”方式。默认值。
    - SPARSE_OBLIQUE:稀疏斜分裂(即在少量特征上进行随机分裂),出自“Sparse Projection Oblique Random Forests”,Tomita 等,2020。
    - MHLD_OBLIQUE:多类别 Hellinger 线性判别分裂,出自“Classification Based on Multivariate Contrast Patterns”,Canete-Sifuentes 等,2029。

uplift_min_examples_in_treatment

  • 类型: 整数 默认值:: 5 可能值:: min:0

  • 仅用于 Uplift 模型。节点中每个处理组的最小样本数。

uplift_split_score

  • 类型: 类别型 默认值:: KULLBACK_LEIBLER 可能值:: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED

  • 仅用于 Uplift 模型。分裂器评分,即分裂器优化的评分。这些评分在 Rzepakowski 等人的“用于单处理和多处理 Uplift 建模的决策树”中介绍。符号:p 表示阳性结果的概率/平均值,q 表示控制组的概率/平均值。
    - KULLBACK_LEIBLERKL:- p log (p/q)
    - EUCLIDEAN_DISTANCEED:(p-q)^2
    - CHI_SQUAREDCS:(p-q)^2/q

winner_take_all

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 控制分类树如何投票。如果为 true,则每棵树投票给一个类别。如果为 false,则每棵树投票给一个类别的分布。winner_take_all_inference=false 通常更可取。

CART

CART (Classification and Regression Trees) 是一种决策树。非叶节点包含条件(也称为分割),而叶节点包含预测值。训练数据集被分成两部分。第一部分用于生长树,第二部分用于剪枝树。

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数

allow_na_conditions

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则树训练会评估类型为 X is NA 的条件,即 X 缺失

categorical_algorithm

  • 类型: 类别型 默认值:: CART 可能值:: CART, ONE_HOT, RANDOM

  • 如何学习类别属性上的分裂。
    - CART:CART 算法。查找形式为“值 \in mask”的类别分裂。该解决方案对于二元分类、回归和排序是精确的。对于多类别分类是近似的。这是一个很好的首选算法。如果出现过拟合(数据集非常小,字典很大),“random”算法是一个不错的替代方案。
    - ONE_HOT:独热编码。查找形式为“属性 == 参数”的最优类别分裂。这种方法类似于(但更有效)将每个可能的类别值转换为布尔特征。提供此方法用于比较目的,通常比其他替代方案表现更差。
    - RANDOM:在一组随机候选中寻找最佳分裂。使用随机搜索找到形式为“值 \in mask”的类别分裂。此解决方案可视为 CART 算法的近似。此方法是 CART 的有力替代方案。该算法的灵感来自 2001 年“随机森林”一书中的“5.1 类别变量”部分。

categorical_set_split_greedy_sampling

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 对于类别集分裂,例如文本。类别值成为正集候选的概率。采样在每个节点上应用一次(即不在贪婪优化的每一步)。

categorical_set_split_max_num_items

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 对于类别集分裂,例如文本。最大项数(采样之前)。如果可用项更多,则忽略频率最低的项。更改此值类似于在加载数据集之前更改“max_vocab_count”,但有一个例外:使用 max_vocab_count 时,所有剩余项都会被分组到一个特殊的词汇外项中。使用 max_num_items 时,则不是这样。

categorical_set_split_min_item_frequency

  • 类型: 整数 默认值:: 1 可能值:: min:1

  • 对于类别集分裂,例如文本。考虑一个项所需的最小出现次数。

growing_strategy

  • 类型: 类别型 默认值:: LOCAL 可能值:: LOCAL, BEST_FIRST_GLOBAL

  • 如何生长树。
    - LOCAL:每个节点独立于其他节点进行分裂。换句话说,只要节点满足分裂“约束”(例如最大深度、最小观测数),节点就会分裂。这是生长决策树的“经典”方式。
    - BEST_FIRST_GLOBAL:选择树中所有节点中损失减少最多的节点进行分裂。此方法也称为“最优优先”或“叶子方向生长”。更多详情请参见 Shi 的“最优优先决策树学习”和 Friedman 的“加性逻辑回归:提升的统计观点”。

honest

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 在 Honest 树中,使用不同的训练样本来推断结构和叶子值。这种正则化技术用样本换取偏差估计。它可能会增加或降低模型的质量。参见 Athey 等人的“Generalized Random Forests”。在本文中,Honest 树使用不放回抽样的随机森林算法进行训练。

honest_fixed_separation

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 仅用于 Honest 树,即 honest=true 时。如果为 true,则为每棵树生成一个新的随机分隔。如果为 false,则对所有树使用相同的分隔(例如,在包含多棵树的梯度提升树中)。

honest_ratio_leaf_examples

  • 类型: 实数 默认值: 0.5 可能值:: min:0 max:1

  • 仅用于 Honest 树,即 honest=true 时。用于设置叶子值的样本比例。

in_split_min_examples_check

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否在分裂搜索中检查 min_examples 约束(即导致一个子节点样本数少于 min_examples 的分裂被视为无效),还是在分裂搜索之前检查(即只有当节点包含多于 min_examples 个样本时才能进行分裂)。如果为 false,则可能存在训练样本数少于 min_examples 的节点。

keep_non_leaf_label_distribution

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 是否保留非叶子节点的节点值(即训练样本标签的分布)。此信息在模型服务期间未使用,但可用于模型解释以及超参数调优。这可能会占用大量空间,有时甚至占模型大小的一半。

max_depth

  • 类型: Integer 默认值: 16 可能值: min:-1

  • 树的最大深度。max_depth=1 表示所有树都将是根节点。max_depth=-1 表示树的深度不受此参数限制。值 <= -2 将被忽略。

max_num_nodes

  • 类型: 整数 默认值:: 31 可能值:: min:-1

  • 树中的最大节点数。设置为 -1 可禁用此限制。仅适用于 growing_strategy=BEST_FIRST_GLOBAL

maximum_model_size_in_memory_in_bytes

  • 类型: 实数 默认值:: -1

  • 限制模型存储在内存中的大小。不同的算法可能以不同方式强制执行此限制。请注意,当模型被编译成推理引擎时,推理引擎的大小通常比原始模型小得多。

maximum_training_duration_seconds

  • 类型: 实数 默认值:: -1

  • 模型的最长训练时长,以秒为单位。每个学习算法都可以根据需要自由使用此参数。启用最长训练时长会使模型训练变得不确定。

mhld_oblique_max_num_attributes

  • 类型: 整数 默认值:: 4 可能值:: min:1

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。投影中的最大属性数。增加此值会增加训练时间。减小此值起正则化作用。该值应在 [2, num_numerical_features] 范围内。如果该值超过数值特征总数,则会自动封顶。允许值为 1,但会导致普通(非斜)分裂。

mhld_oblique_sample_attributes

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 对于 MHLD 斜分裂,即 split_axis=MHLD_OBLIQUE。如果为 true,则应用由“num_candidate_attributes”或“num_candidate_attributes_ratio”参数控制的属性抽样。如果为 false,则测试所有属性。

min_examples

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 节点中的最小样本数。

missing_value_policy

  • 类型: 类别型 默认值:: GLOBAL_IMPUTATION 可能值:: GLOBAL_IMPUTATION, LOCAL_IMPUTATION, RANDOM_LOCAL_IMPUTATION

  • 处理缺失属性值的方法。
    - GLOBAL_IMPUTATION:缺失属性值通过在整个数据集上计算的均值(数值属性)或最频繁项(类别属性)进行填充(即数据规范中包含的信息)。
    - LOCAL_IMPUTATION:缺失属性值通过在当前节点中训练样本上评估的均值(数值属性)或最频繁项(类别属性)进行填充。
    - RANDOM_LOCAL_IMPUTATION:缺失属性值通过从当前节点中训练样本中随机抽样的值进行填充。Clinic 等人在“Random Survival Forests”中提出了此方法 (https://projecteuclid.org/download/pdfview_1/euclid.aoas/1223908043)。

num_candidate_attributes

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 每个节点测试的唯一有效属性数量。如果属性至少有一个有效分裂,则该属性是有效的。如果 num_candidate_attributes=0,则该值设置为随机森林的经典默认值:分类时为 sqrt(输入属性数量),回归时为 输入属性数量 / 3。如果 num_candidate_attributes=-1,则测试所有属性。

num_candidate_attributes_ratio

  • 类型: 实数 默认值:: -1 可能值:: min:-1 max:1

  • 每个节点测试的属性比例。如果设置,则等价于 num_candidate_attributes = 输入特征数量 x num_candidate_attributes_ratio。可能的值介于 ]0, 1] 以及 -1。如果未设置或等于 -1,则使用 num_candidate_attributes

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。

sorting_strategy

  • 类型: Categorical 默认值: IN_NODE 可能值: IN_NODE, PRESORT, FORCE_PRESORT, AUTO

  • 为了找到分裂,数值特征如何排序
    - AUTO:在 IN_NODE, FORCE_PRESORT, 和 LAYER 中选择最有效的方法。
    - IN_NODE:特征在使用前在节点内进行排序。此解决方案速度较慢但内存占用少。
    - FORCE_PRESORT:特征在训练开始时预排序。此解决方案速度更快,但比 IN_NODE 消耗更多内存。
    - PRESORT:在 FORCE_PRESORT 和 IN_NODE 之间自动选择。
    .

sparse_oblique_max_num_projections

  • 类型: 整数 默认值:: 6000 可能值:: min:1

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。最大投影数(在 num_projections_exponent 之后应用)。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。增加“max_num_projections”会增加训练时间,但不影响推理时间。在模型开发的后期阶段,如果每一点准确度都很重要,请增加此值。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)未定义此超参数。

sparse_oblique_normalization

  • 类型: 类别型 默认值:: NONE 可能值:: NONE, STANDARD_DEVIATION, MIN_MAX

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。在应用稀疏斜投影之前,对特征应用的归一化。
    - NONE:不归一化。
    - STANDARD_DEVIATION:根据整个训练数据集上估计的标准差对特征进行归一化。也称为 Z-Score 归一化。
    - MIN_MAX:根据整个训练数据集上估计的范围(即最大值-最小值)对特征进行归一化。

sparse_oblique_num_projections_exponent

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。控制在每个节点测试的随机投影数量。
    增加此值很可能提高模型质量,显著增加训练时间,但不影响推理时间。
    斜分裂尝试使用 max(p^num_projections_exponent, max_num_projections) 个随机投影来选择分裂,其中 p 是数值特征的数量。因此,增加此 num_projections_exponent 和可能的 max_num_projections 可能会提高模型质量,但也会显著增加训练时间。
    请注意,(经典) 随机森林的复杂度大致与 num_projections_exponent=0.5 成正比,因为它考虑 sqrt(特征数) 来进行分裂。(经典) GBDT 的复杂度大致与 num_projections_exponent=1 成正比,因为它考虑所有特征来进行分裂。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)建议值在 [1/4, 2] 范围内。

sparse_oblique_projection_density_factor

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 投影密度作为特征数量的指数。对于每个投影,每个特征都有“projection_density_factor / num_features”的概率被考虑在投影中。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)称此参数为 lambda,并建议值在 [1, 5] 范围内。
    增加此值会增加训练和推理时间(平均而言)。此值最好针对每个数据集进行调优。

sparse_oblique_weights

  • 类型: 类别型 默认值:: BINARY 可能值:: BINARY, CONTINUOUS

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。可能的值
    - BINARY:斜权重在 {-1,1} 中采样(默认)。
    - CONTINUOUS:斜权重在 [-1,1] 中采样。

split_axis

  • 类型: 类别型 默认值:: AXIS_ALIGNED 可能值:: AXIS_ALIGNED, SPARSE_OBLIQUE, MHLD_OBLIQUE

  • 数值特征考虑的分裂结构。
    - AXIS_ALIGNED:轴对齐分裂(即一次一个条件)。这是训练树的“经典”方式。默认值。
    - SPARSE_OBLIQUE:稀疏斜分裂(即在少量特征上进行随机分裂),出自“Sparse Projection Oblique Random Forests”,Tomita 等,2020。
    - MHLD_OBLIQUE:多类别 Hellinger 线性判别分裂,出自“Classification Based on Multivariate Contrast Patterns”,Canete-Sifuentes 等,2029。

uplift_min_examples_in_treatment

  • 类型: 整数 默认值:: 5 可能值:: min:0

  • 仅用于 Uplift 模型。节点中每个处理组的最小样本数。

uplift_split_score

  • 类型: 类别型 默认值:: KULLBACK_LEIBLER 可能值:: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED

  • 仅用于 Uplift 模型。分裂器评分,即分裂器优化的评分。这些评分在 Rzepakowski 等人的“用于单处理和多处理 Uplift 建模的决策树”中介绍。符号:p 表示阳性结果的概率/平均值,q 表示控制组的概率/平均值。
    - KULLBACK_LEIBLERKL:- p log (p/q)
    - EUCLIDEAN_DISTANCEED:(p-q)^2
    - CHI_SQUAREDCS:(p-q)^2/q

validation_ratio

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 用于创建验证数据集以剪枝树的训练数据集比例。如果设置为 0,则整个数据集用于训练,并且不对树进行剪枝。

DISTRIBUTED_GRADIENT_BOOSTED_TREES

梯度提升树学习算法的精确分布式版本。有关 GBT 的介绍,请参阅非分布式梯度提升树学习算法的文档。

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true,则在返回模型预测之前应用链接函数(也称为激活函数)(如果存在)。如果为 false,则返回链接函数之前的模型输出。
    例如,在二元分类的情况下,链接函数前的输出是逻辑值,而链接函数后的输出是概率。

force_numerical_discretization

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 false,则只有满足 "max_unique_values_for_discretized_numerical" 条件的数值列才会被离散化。如果为 true,则所有数值列都会被离散化。唯一值数量多于 "max_unique_values_for_discretized_numerical" 的列将使用 "max_unique_values_for_discretized_numerical" 个bin进行近似。此参数会影响模型训练。

max_depth

  • 类型: 整数 默认值:: 6 可能值:: min:-1

  • 树的最大深度。max_depth=1 表示所有树都将是根节点。max_depth=-1 表示树的深度不受此参数限制。值 <= -2 将被忽略。

max_unique_values_for_discretized_numerical

  • 类型: Integer 默认值: 16000 可能值: min:1

  • 允许对数值特征进行预离散化的最大唯一值数量。在大数据集的情况下,具有少量唯一值的离散化数值特征比传统/非离散化数值特征更易于学习。此参数不影响最终模型。但是,它可以加快或减慢训练速度。

maximum_model_size_in_memory_in_bytes

  • 类型: 实数 默认值:: -1

  • 限制模型存储在内存中的大小。不同的算法可能以不同方式强制执行此限制。请注意,当模型被编译成推理引擎时,推理引擎的大小通常比原始模型小得多。

maximum_training_duration_seconds

  • 类型: 实数 默认值:: -1

  • 模型的最长训练时长,以秒为单位。每个学习算法都可以根据需要自由使用此参数。启用最长训练时长会使模型训练变得不确定。

min_examples

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 节点中的最小样本数。

num_candidate_attributes

  • 类型: 整数 默认值: -1 可能值:: min:-1

  • 每个节点测试的唯一有效属性数量。如果属性至少有一个有效分裂,则该属性是有效的。如果 num_candidate_attributes=0,则该值设置为随机森林的经典默认值:分类时为 sqrt(输入属性数量),回归时为 输入属性数量 / 3。如果 num_candidate_attributes=-1,则测试所有属性。

num_candidate_attributes_ratio

  • 类型: 实数 默认值:: -1 可能值:: min:-1 max:1

  • 每个节点测试的属性比例。如果设置,则等价于 num_candidate_attributes = 输入特征数量 x num_candidate_attributes_ratio。可能的值介于 ]0, 1] 以及 -1。如果未设置或等于 -1,则使用 num_candidate_attributes

num_trees

  • 类型: 整数 默认值:: 300 可能值:: min:0

  • 最大决策树数量。如果启用早停,实际训练的树数量可能会更少。

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。

shrinkage

  • 类型: 实数 默认值: 0.1 可能值:: min:0 max:1

  • 应用于每棵树预测的系数。小值 (0.02) 通常会给出更准确的结果(假设训练了足够多的树),但会导致模型更大。类似于神经网络的学习率。对于 DART 模型固定为 1.0。

use_hessian_gain

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 如果为 true,则使用包含 Hessian 项的分裂增益公式,即优化分裂以最小化“梯度/Hessian”的方差。适用于除回归之外的所有损失函数。

worker_logs

  • 类型: 类别型 默认值:: true 可能值:: true, false

  • 如果为 true,worker 将打印训练日志。

ISOLATION_FOREST

一个 孤立森林 (Isolation Forest) 是一系列无标签独立训练的决策树,用于划分特征空间。孤立森林的预测结果是一个异常分数,指示样本是否源自与训练样本相同的分布。我们称孤立森林为 Liu 等人提出的原始算法及其扩展。

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数

max_depth

  • 类型: Integer 默认值: -2 可能值: min:-2

  • 树的最大深度。max_depth=1 意味着所有树都是根节点。max_depth=-1 意味着树的深度不受此参数约束。max_depth=-2 意味着最大深度为 log2(每棵树采样的样本数量)(默认值)。

min_examples

  • 类型: 整数 默认值:: 5 可能值:: min:1

  • 节点中的最小样本数。

num_trees

  • 类型: 整数 默认值:: 300 可能值:: min:0

  • 个体决策树的数量。增加树的数量可以提高模型质量,但会增加模型大小、训练速度和推理延迟。

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。

sparse_oblique_normalization

  • 类型: 类别型 默认值:: NONE 可能值:: NONE, STANDARD_DEVIATION, MIN_MAX

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。在应用稀疏斜投影之前,对特征应用的归一化。
    - NONE:不归一化。
    - STANDARD_DEVIATION:根据整个训练数据集上估计的标准差对特征进行归一化。也称为 Z-Score 归一化。
    - MIN_MAX:根据整个训练数据集上估计的范围(即最大值-最小值)对特征进行归一化。

sparse_oblique_projection_density_factor

  • 类型: 实数 默认值:: 2 可能值:: min:0

  • 投影密度作为特征数量的指数。对于每个投影,每个特征都有“projection_density_factor / num_features”的概率被考虑在投影中。
    论文“Sparse Projection Oblique Random Forests”(Tomita 等,2020)称此参数为 lambda,并建议值在 [1, 5] 范围内。
    增加此值会增加训练和推理时间(平均而言)。此值最好针对每个数据集进行调优。

sparse_oblique_weights

  • 类型: 类别型 默认值:: BINARY 可能值:: BINARY, CONTINUOUS

  • 对于稀疏斜分裂,即 split_axis=SPARSE_OBLIQUE。可能的值
    - BINARY:斜权重在 {-1,1} 中采样(默认)。
    - CONTINUOUS:斜权重在 [-1,1] 中采样。

split_axis

  • 类型: Categorical 默认值: AXIS_ALIGNED 可能值: AXIS_ALIGNED, SPARSE_OBLIQUE

  • 数值特征考虑的分裂结构。
    - AXIS_ALIGNED:轴对齐分裂(即一次一个条件)。这是训练树的“经典”方式。默认值。
    - SPARSE_OBLIQUE: 来自 "Sparse Projection Oblique Random Forests", Tomita et al., 2020 的稀疏斜向分割(即在少量特征上的随机分割)。这包括 "Extended Isolation Forests" (Sahand Hariri et al., 2018) 中描述的分割。

subsample_count

  • 类型: Integer 默认值: 256 可能值: min:0

  • 用于生长每棵树的样本数量。只能设置 "subsample_ratio" 和 "subsample_count" 中的一个。默认情况下,每棵树采样 256 个样本。请注意,除非明确设置 max_depth,否则此参数也会将树的最大深度限制为 log2(每棵树使用的样本数量)。

subsample_ratio

  • 类型: 实数 默认值:: 1 可能值:: min:0

  • 用于生长每棵树的训练样本数量的比例。只能设置 "subsample_ratio" 和 "subsample_count" 中的一个。默认情况下,每棵树采样 256 个样本。请注意,除非明确设置 max_depth,否则此参数也会将树的最大深度限制为 log2(每棵树使用的样本数量)。

HYPERPARAMETER_OPTIMIZER

Protobuffer 训练配置

超参数 protobuffer 用于 C++ 和 CLI API。

超参数

maximum_model_size_in_memory_in_bytes

  • 类型: 实数 默认值:: -1

  • 限制模型存储在内存中的大小。不同的算法可能以不同方式强制执行此限制。请注意,当模型被编译成推理引擎时,推理引擎的大小通常比原始模型小得多。

maximum_training_duration_seconds

  • 类型: 实数 默认值:: -1

  • 模型的最长训练时长,以秒为单位。每个学习算法都可以根据需要自由使用此参数。启用最长训练时长会使模型训练变得不确定。

pure_serving_model

  • 类型: 类别型 默认值: false 可能值:: true, false

  • 清除模型中模型服务不需要的任何信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(通常减小 50%)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。

random_seed

  • 类型: 整数 默认值:: 123456

  • 模型训练的随机种子。学习器应该根据随机种子确定性地运行。