超参数
本页面列出了学习器及其相应的超参数。
使用方法
通过 Python 和 TensorFlow 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,超参数在 训练配置协议缓冲区 中传递。例如:
learner: "RANDOM_FOREST"
[yggdrasil_decision_forests.model.random_forest.proto.random_forest_config] {
num_trees: 1000
}
梯度提升树 (GRADIENT_BOOSTED_TREES)
梯度提升树(GBT),也称为梯度提升决策树(GBDT)或梯度提升机(GBM),是一组按顺序训练的浅层决策树。每棵树都经过训练以预测并“纠正”先前训练的树的误差(更准确地说,每棵树预测相对于模型输出的损失梯度)。
协议缓冲区训练配置
超参数协议缓冲区与 C++ 和 CLI API 一起使用。
- learner/abstract_learner.proto
- learner/decision_tree/decision_tree.proto
- learner/gradient_boosted_trees/gradient_boosted_trees.proto
超参数模板
超参数模板 是预配置的超参数集合,这些参数会更新为已找到的最佳值。与从不更改的默认值不同,超参数模板会在 YDF 中提供新功能时更新。可以使用 C++ 或 CLI API 手动复制超参数模板,也可以在 Python 和 TensorFlow Decision Forests API 中将其传递给 hyperparameter_template 构造函数
参数。
better_default@1
一种通常比默认参数更好的配置,且不会增加更多开销。
growing_strategy
: BEST_FIRST_GLOBAL
benchmark_rank1@1
在我们的基准测试中排名靠前的超参数,稍作修改以在合理时间内运行。
growing_strategy
: BEST_FIRST_GLOBALcategorical_algorithm
: RANDOMsplit_axis
: SPARSE_OBLIQUEsparse_oblique_normalization
: MIN_MAXsparse_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 缺失
。
apply_link_function
-
类型: 分类 默认值: true 可能值: true, false
-
如果为 true,在返回模型预测之前应用链接函数(也称为激活函数),如果有的话。如果为 false,返回链接函数前的模型输出。
例如,在二分类情况下,链接函数前的输出是逻辑值,而链接函数后的输出是概率。
categorical_algorithm
- 类型: 分类 默认值: CART 可能值: CART, ONE_HOT, RANDOM
- 如何学习分类属性的分裂。
-CART
:CART算法。找到形式为“值 \in 掩码”的分类分裂。该解决方案对于二分类、回归和排序是精确的。对于多分类,它是近似的。这是一个很好的首选算法。在过拟合的情况下(非常小的数据集,大型字典),“随机”算法是一个很好的替代方案。
-ONE_HOT
:独热编码。找到形式为“属性 == 参数”的最优分类分裂。这种方法类似于(但更高效)将每个可能的分类值转换为布尔特征。此方法可用于比较目的,通常表现不如其他替代方案。
-RANDOM
:在一组随机候选中找到最佳分裂。使用随机搜索找到形式为“值 \in 掩码”的分类分裂。此解决方案可以看作是CART算法的近似。这种方法是CART的强有力替代方案。该算法受到“随机森林”2001年“5.1 分类变量”部分的启发。
categorical_set_split_greedy_sampling
-
类型: 实数 默认值: 0.1 可能值: 最小值:0 最大值:1
-
对于分类集分裂,例如文本。分类值成为正集候选的概率。采样在每个节点应用一次(即不是在贪婪优化的每一步)。
categorical_set_split_max_num_items
-
类型: 整数 默认值: -1 可能值: 最小值:-1
-
对于分类集分裂,例如文本。最大项目数(采样前)。如果有更多项目可用,则忽略最不频繁的项目。更改此值类似于在加载数据集之前更改“max_vocab_count”,但有一个例外:使用
max_vocab_count
,所有剩余项目都被分组到一个特殊的“词汇外”项目中。使用max_num_items
,情况并非如此。
categorical_set_split_min_item_frequency
-
类型: 整数 默认值: 1 可能值: 最小值:1
-
对于分类集分裂,例如文本。项目被考虑的最小出现次数。
compute_permutation_variable_importance
-
类型: 分类 默认值: false 可能值: true, false
-
如果为真,在训练结束时使用验证数据集计算模型的排列变量重要性。启用此功能可能会显著增加训练时间。
cross_entropy_ndcg_truncation
-
类型: 整数 默认值: 5 可能值: 最小值:1
-
交叉熵NDCG损失的截断(默认5)。仅在使用交叉熵NDCG损失时使用,即
loss="XE_NDCG_MART"
dart_dropout
-
类型: 实数 默认值: 0.01 可能值: 最小值:0 最大值:1
-
使用DART时应用的丢弃率,即当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 可能值: 最小值:0
-
早期停止的初始迭代次数。
- 用于早期停止计算的第一次迭代的0基索引。增加此值可以防止由于学习器初始迭代的噪声而过早停止。
early_stopping_num_trees_look_ahead
-
类型: 整数 默认值: 30 可能值: 最小值:1
-
用于检测验证损失增加并触发早期停止的滚动树的数量。
focal_loss_alpha
-
类型: 实数 默认值: 0.5 可能值: 最小值:0 最大值:1
-
实验性,默认0.5。焦点损失的加权参数,正样本按alpha加权,负样本按(1-alpha)加权。默认值0.5表示没有主动的类级别加权。仅在使用焦点损失时使用,即
loss="BINARY_FOCAL_LOSS"
focal_loss_gamma
-
类型: 实数 默认值: 2 可能值: 最小值:0
-
实验性,默认2.0。焦点损失中误预测指数项的指数,对应于https://arxiv.org/pdf/1708.02002.pdf中的gamma参数。仅在使用焦点损失时使用,即
loss="BINARY_FOCAL_LOSS"
forest_extraction
-
类型: 分类 默认值: MART 可能值: MART, DART
-
如何构建森林:
- MART: 用于多重加性回归树。这是构建GBDT的“经典”方式,即每棵树试图“纠正”前几棵树的错误。
- DART: 用于Dropout加性回归树。这是MART的一种修改,在http://proceedings.mlr.press/v38/korlakaivinayak15.pdf中提出。在这里,每棵树试图“纠正”前几棵树的随机子集的错误。
goss_alpha
-
类型: 实数 默认值: 0.2 可能值: 最小值:0 最大值:1
-
GOSS(基于梯度的一侧采样;参见“LightGBM: 一种高效的梯度提升决策树”)采样方法的alpha参数。
goss_beta
-
类型: 实数 默认值: 0.1 可能值: 最小值:0 最大值:1
-
GOSS(基于梯度的一侧采样)采样方法的beta参数。
growing_strategy
-
类型: 分类 默认值: LOCAL 可能值: LOCAL, BEST_FIRST_GLOBAL
-
如何生长树:
-LOCAL
: 每个节点独立于其他节点进行分裂。换句话说,只要节点满足分裂的“约束条件(例如最大深度、最小观察数),节点就会被分裂。这是生长决策树的“经典”方式。
-BEST_FIRST_GLOBAL
: 在树的所有节点中,损失减少最好的节点被选择进行分裂。这种方法也称为“最佳优先”或“叶向生长”。详见“Best-first decision tree learning”,Shi和“Additive logistic regression : A statistical view of boosting”,Friedman。
honest
-
类型: 分类 默认值: false 可能值: true, false
-
在诚实树中,不同的训练样本用于推断结构和叶值。这种正则化技术通过交换样本以获得偏差估计。它可能会增加或减少模型的质量。参见“Generalized Random Forests”,Athey等。在这篇论文中,诚实树使用随机森林算法进行训练,采用无替换采样。
honest_fixed_separation
-
类型: 分类 默认值: false 可能值: true, false
-
仅适用于诚实树,即honest=true。如果为true,则为每棵树生成一个新的随机分离。如果为false,则所有树使用相同的分离(例如,在包含多棵树的梯度提升树中)。
honest_ratio_leaf_examples
-
类型: 实数 默认值: 0.5 可能的值: 最小值:0 最大值:1
-
仅适用于诚实树,即 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 可能的值: 最小值:0
-
应用于训练损失的 L1 正则化。影响树结构和叶值。
l2_categorical_regularization
-
类型: 实数 默认值: 1 可能的值: 最小值:0
-
应用于分类特征训练损失的 L2 正则化。影响树结构和叶值。
l2_regularization
-
类型: 实数 默认值: 0 可能的值: 最小值:0
-
应用于除分类特征外所有特征训练损失的 L2 正则化。
lambda_loss
-
类型: 实数 默认值: 1 可能的值: 最小值: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
: LambdaMART 与 NDCG@5。
-XE_NDCG_MART
: 交叉熵损失 NDCG。参见 arxiv.org/abs/1911.09798。
-BINARY_FOCAL_LOSS
: 焦点损失。仅对二分类有效。参见 https://arxiv.org/pdf/1708.02002.pdf。
-POISSON
: 泊松对数似然。仅对回归有效。
-MEAN_AVERAGE_ERROR
: 平均绝对误差,即 MAE。
-LAMBDA_MART_NDCG5
: 已弃用,使用 LAMBDA_MART_NDCG。LambdaMART 与 NDCG@5。
max_depth
-
类型: 整数 默认值: 6 可能的值: 最小值:-1
-
树的最大深度。
max_depth=1
表示所有树都将是根节点。max_depth=-1
表示树的深度不受此参数限制。 值 <= -2 将被忽略。
max_num_nodes
-
类型: 整数 默认值: 31 可能值: 最小值:-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 可能值: 最小值: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 可能值: 最小值: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 可能值: 最小值:1
-
NDCG 损失的截断值(默认 5)。仅在使用 NDCG 损失时使用,即
loss="LAMBDA_MART_NDCG"
。
num_candidate_attributes
-
类型: 整数 默认值: -1 可能值: 最小值:-1
-
每个节点测试的唯一有效属性的数量。一个属性如果至少有一个有效分割,则被视为有效。如果
num_candidate_attributes=0
,则该值设置为随机森林的经典默认值:分类时为sqrt(输入属性数量)
,回归时为输入属性数量 / 3
。如果num_candidate_attributes=-1
,则测试所有属性。
num_candidate_attributes_ratio
-
类型: 实数 默认值: -1 可能值: 最小:-1 最大:1
-
每个节点测试的属性比率。如果设置,等同于
num_candidate_attributes = number_of_input_features x num_candidate_attributes_ratio
。可能的值在 ]0, 1] 之间,以及 -1。如果未设置或等于 -1,则使用num_candidate_attributes
。
num_trees
-
类型: 整数 默认值: 300 可能值: 最小:0
-
决策树的最大数量。如果启用了早期停止,实际训练的树的数量可能会更少。
pure_serving_model
-
类型: 分类 默认值: false 可能值: true, false
-
从模型中清除任何不需要用于模型服务的信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减少(常见的是减少50%的模型大小)。此参数对模型的质量、服务速度或模型服务的RAM使用没有影响。
random_seed
-
类型: 整数 默认值: 123456
-
模型训练的随机种子。学习器应通过随机种子实现确定性。
sampling_method
-
类型: 分类 默认值: RANDOM 可能值: NONE, RANDOM, GOSS, SELGB
-
控制用于训练单个树的数据集采样方法。
- NONE: 不应用采样。这等同于 RANDOM 采样,且 "subsample=1"。
- RANDOM (默认): 均匀随机采样。如果设置了 "subsample",则自动选择。
- GOSS: 基于梯度的单侧采样。如果设置了 "goss_alpha" 或 "goss_beta",则自动选择。
- SELGB: 选择性梯度提升。如果设置了 "selective_gradient_boosting_ratio",则自动选择。仅对排序有效。
selective_gradient_boosting_ratio
-
类型: 实数 默认值: 0.01 可能值: 最小:0 最大:1
-
用于选择性梯度提升(Selective Gradient Boosting for Effective Learning to Rank; Lucchese et al; http://quickrank.isti.cnr.it/selective-data/selective-SIGIR2018.pdf)采样方法的单个树训练的数据集比率。
shrinkage
-
类型: 实数 默认值: 0.1 可能值: 最小:0 最大: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 可能值: 最小: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 可能值: 最小值: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(num_features)。(经典)GBDT 的复杂度大致与num_projections_exponent=1
成正比,因为它在分割时考虑了所有特征。
论文 "Sparse Projection Oblique Random Forests"(Tomita 等人,2020)建议值在 [1/4, 2] 之间。
sparse_oblique_projection_density_factor
-
类型: 实数 默认值: 2 可能值: 最小值: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 可能值: 最小值:0 最大值:1
-
用于训练单个树的随机采样方法的数据集比例(无放回抽样)。如果设置了 "subsample",并且 如果“sampling_method”未设置或设置为“NONE”,则“sampling_method”会隐式设置为“RANDOM”。换句话说,要启用随机子采样,只需设置“subsample”。
uplift_min_examples_in_treatment
-
类型: 整数 默认值: 5 可能的值: 最小值:0
-
仅适用于uplift模型。节点中每个处理的最小样本数。
uplift_split_score
-
类型: 分类 默认值: KULLBACK_LEIBLER 可能的值: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED
-
仅适用于uplift模型。分裂器得分,即分裂器优化的得分。这些得分在“针对单一和多重处理的提升模型决策树”中引入,由Rzepakowski等人提出。符号:
p
正结果的概率/平均值,q
对照组的概率/平均值。
-KULLBACK_LEIBLER
或KL
: - p log (p/q)
-EUCLIDEAN_DISTANCE
或ED
: (p-q)^2
-CHI_SQUARED
或CS
: (p-q)^2/q
use_goss
- 类型: 分类 默认值: false 可能的值: true, false
use_hessian_gain
-
类型: 分类 默认值: false 可能的值: true, false
-
使用true时,使用带有hessian项的分裂增益公式,即优化分裂以最小化“梯度/hessian”的方差。适用于所有损失函数,除了回归。
validation_interval_in_trees
-
类型: 整数 默认值: 1 可能的值: 最小值:1
-
每“validation_interval_in_trees”棵树在验证集上评估模型。增加此值可以降低验证成本,并可能影响早停策略(因为早停仅在验证期间测试)。
validation_ratio
-
类型: 实数 默认值: 0.1 可能的值: 最小值:0 最大值:1
-
如果没有提供验证数据集,则用于验证的训练数据集的比例。无论验证数据集是直接提供还是从训练数据集中提取,都用于计算验证损失、其他验证指标,并可能触发早停(如果启用)。当早停被禁用时,验证数据集仅用于监控,不会直接影响模型。如果“validation_ratio”设置为0,则禁用早停(即意味着设置early_stopping=NONE)。
RANDOM_FOREST
随机森林是由独立训练且未经修剪的深度CART决策树组成的集合。每棵树都在原始训练数据集的随机子集(有放回采样)上进行训练。
该算法独特之处在于它对过拟合具有鲁棒性,即使在极端情况下(例如特征数量多于训练样本)也是如此。
它可能是决策森林训练算法中最著名的一种。
Protobuffer训练配置
超参数protobuffers用于C++和CLI API。
- learner/abstract_learner.proto
- learner/decision_tree/decision_tree.proto
- learner/random_forest/random_forest.proto
超参数模板
超参数模板是预配置的超参数集合,这些参数会更新为找到的最佳值。与从不更改的默认值不同,超参数模板会在YDF中提供新功能时更新。可以使用C++或CLI API手动复制超参数模板,或者将其传递给hyperparameter_template构造函数
。
在 Python 和 TensorFlow Decision Forests API 中的参数。
better_default@1
一种通常比默认参数更好且不会增加成本的配置。
winner_take_all
: true
benchmark_rank1@1
在我们的基准测试中略微修改以在合理时间内运行的顶级超参数。
winner_take_all
: truecategorical_algorithm
: RANDOMsplit_axis
: SPARSE_OBLIQUEsparse_oblique_normalization
: MIN_MAXsparse_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 可能的值: 最小值: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 算法。找到形式为“value \in mask”的分类分割。该解决方案对于二分类、回归和排序是精确的。对于多分类,它是近似的。这是首选的初始算法。如果出现过拟合(非常小的数据集,大字典),“random”算法是一个很好的替代方案。
-ONE_HOT
:独热编码。找到形式为“attribute == param”的最优分类分割。此方法类似于将每个可能的分类值转换为布尔特征,但效率更高。此方法用于比较目的,通常表现不如其他替代方案。
-RANDOM
:在一组随机候选中找到最佳分割。使用随机搜索找到形式为“value \in mask”的分类分割。此解决方案可以看作是 CART 算法的近似。此方法是 CART 的强有力替代方案。此算法灵感来自“随机森林”2001 年版第 5.1 节“分类变量”。
categorical_set_split_greedy_sampling
-
类型: 实数 默认值: 0.1 可能的值: 最小值:0 最大值:1
-
对于分类集分割(例如文本)。分类值成为正集候选的概率。采样在每个节点应用一次(即不是在贪婪优化的每一步)。
categorical_set_split_max_num_items
-
类型: 整数 默认值: -1 可能的值: 最小值:-1
-
对于分类集分割(例如文本)。最大项目数(采样前)。如果有更多项目可用,则忽略最不频繁的项目。更改此值类似于在加载数据集之前更改“max_vocab_count”,但以下情况除外:使用
max_vocab_count
时,所有剩余项目都被分组到一个特殊的 Out-of-vocabulary 项目中。使用max_num_items
时,情况并非如此。
categorical_set_split_min_item_frequency
-
类型: 整数 默认值: 1 可能的值: 最小值:1
-
对于分类集合分割(例如文本),项目被考虑的最小出现次数。
compute_oob_performances
-
类型: 分类 默认值: true 可能的值: true, false
-
如果为真,计算袋外评估(然后在摘要和模型检查器中可用)。这种评估是交叉验证评估的一种廉价替代方案。
compute_oob_variable_importances
-
类型: 分类 默认值: false 可能的值: true, false
-
如果为真,计算袋外特征重要性(然后在摘要和模型检查器中可用)。请注意,计算袋外特征重要性可能会很昂贵。
growing_strategy
-
类型: 分类 默认值: LOCAL 可能的值: LOCAL, BEST_FIRST_GLOBAL
-
如何生长树。
-LOCAL
:每个节点独立于其他节点进行分割。换句话说,只要节点满足分割的“约束条件”(例如最大深度、最小观察数),该节点就会被分割。这是“经典”的决策树生长方式。
-BEST_FIRST_GLOBAL
:在树的所有节点中,损失减少最好的节点被选择进行分割。这种方法也称为“最佳优先”或“叶向生长”。更多详情请参见“Best-first decision tree learning”,Shi 和“Additive logistic regression : A statistical view of boosting”,Friedman。
honest
-
类型: 分类 默认值: false 可能的值: true, false
-
在诚实树中,不同的训练样本用于推断结构和叶值。这种正则化技术通过交换样本以获得偏差估计。它可能会增加或减少模型的质量。参见“Generalized Random Forests”,Athey 等。在这篇论文中,诚实树使用随机森林算法进行训练,采用无放回抽样。
honest_fixed_separation
-
类型: 分类 默认值: false 可能的值: true, false
-
仅适用于诚实树(即 honest=true)。如果为真,为每棵树生成一个新的随机分离。如果为假,所有树使用相同的分离(例如,在包含多棵树的梯度提升树中)。
honest_ratio_leaf_examples
-
类型: 实数 默认值: 0.5 可能的值: 最小值:0 最大值:1
-
仅适用于诚实树(即 honest=true)。用于设置叶值的样本比例。
in_split_min_examples_check
-
类型: 分类 默认值: true 可能的值: true, false
-
是否在分割搜索中检查
min_examples
约束(即导致一个子节点少于min_examples
样本的分割被视为无效)或在分割搜索之前(即只有包含超过min_examples
样本的节点才能被推导)。如果为假,可能会有少于min_examples
训练样本的节点。
keep_non_leaf_label_distribution
-
类型: 分类 默认值: true 可能的值: true, false
-
是否保留非叶节点的节点值(即训练样本标签的分布)。此信息在服务期间不使用,但它可以用于模型解释和超参数调优。这可能会占用大量空间,有时占模型大小的一半。
max_depth
- 类型: 整数 默认值: 16 可能的值: 最小值:-1
- 树的最大深度。
max_depth=1
表示所有树都将是根节点。max_depth=-1
表示树的深度不受此参数限制。值 <= -2 将被忽略。
max_num_nodes
-
类型: 整数 默认值: 31 可能值: 最小值:-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 可能值: 最小值: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 可能值: 最小值: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
-
类型: 整数 默认值: 0 可能值: 最小值:-1
-
每个节点测试的唯一有效属性的数量。一个属性如果至少有一个有效分割,则被认为是有效的。如果
num_candidate_attributes=0
,则该值设置为随机森林的经典默认值:分类情况下为sqrt(输入属性数量)
,回归情况下为输入属性数量 / 3
。如果num_candidate_attributes=-1
,则测试所有属性。
num_candidate_attributes_ratio
-
类型: 实数 默认值: -1 可能值: 最小值:-1 最大值:1
-
每个节点测试的属性比例。如果设置,则相当于
num_candidate_attributes = number_of_input_features x num_candidate_attributes_ratio
。可能的值在 ]0, 1] 之间,也可以是 -1。如果未设置或等于 -1,则使用num_candidate_attributes
。
num_oob_variable_importances_permutations
-
类型: 整数 默认值: 1 可能的值: 最小值:1
-
数据集被重新洗牌以计算排列变量重要性的次数。增加此值会增加训练时间(如果 "compute_oob_variable_importances:true")以及袋外变量重要性指标的稳定性。
num_trees
-
类型: 整数 默认值: 300 可能的值: 最小值: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 可能的值: 最小值: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 et al, 2020)未定义此超参数。
sparse_oblique_normalization
-
类型: 分类 默认值: NONE 可能的值: NONE, STANDARD_DEVIATION, MIN_MAX
-
对于稀疏斜向分割,即
split_axis=SPARSE_OBLIQUE
。在应用稀疏斜向投影之前对特征进行的归一化处理。
-NONE
: 无归一化。
-STANDARD_DEVIATION
: 在整个训练数据集上估计的标准差对特征进行归一化。也称为 Z-Score 归一化。
-MIN_MAX
: 在整个训练数据集上估计的范围(即 max-min)对特征进行归一化。
sparse_oblique_num_projections_exponent
-
类型: 实数 默认值: 2 可能的值: 最小值: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(num_features)。(经典)GBDT 的复杂度大致与num_projections_exponent=1
成正比,因为它在分割时考虑了所有特征。
论文 "Sparse Projection Oblique Random Forests"(Tomita 等,2020)建议值在 [1/4, 2] 之间。
sparse_oblique_projection_density_factor
-
类型: 实数 默认值: 2 可能的值: 最小值: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 可能的值: 最小值:0
-
仅适用于提升模型。节点中每个处理的示例最小数量。
uplift_split_score
-
类型: 分类 默认值: KULLBACK_LEIBLER 可能的值: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED
-
仅适用于提升模型。分割器优化的分数,即分割器优化的分数。这些分数在 "Decision trees for uplift modeling with single and multiple treatments",Rzepakowski 等中引入。符号:
p
正结果的概率/平均值,q
对照组中的概率/平均值。
-KULLBACK_LEIBLER
或KL
:- p log (p/q)
-EUCLIDEAN_DISTANCE
或ED
:(p-q)^2
-CHI_SQUARED
或CS
:(p-q)^2/q
winner_take_all
-
类型: 分类 默认值: true 可能的值: true, false
-
控制分类树的投票方式。如果为 true,每棵树投给一个类。如果为 false,每棵树投给一个类的分布。winner_take_all_inference=false 通常更可取。
CART
CART(分类与回归树)是一种决策树。非叶节点包含条件(也称为分割),而叶节点包含 预测值。训练数据集被分为两部分。第一部分用于生成树,而第二部分用于修剪树。
Protobuffer 训练配置
超参数 protobuffers 与 C++ 和 CLI API 一起使用。
超参数
allow_na_conditions
-
类型: 分类 默认值: false 可能值: true, false
-
如果为 true,树训练会评估
X 为 NA
类型(即X 缺失
)的条件。
categorical_algorithm
-
类型: 分类 默认值: CART 可能值: CART, ONE_HOT, RANDOM
-
如何学习分类属性的分割。
-CART
: CART 算法。找到形式为 "值 ∈ 掩码" 的分类分割。该解决方案对于二分类、回归和排序是精确的。对于多类分类,它是近似的。这是首先使用的良好算法。在过拟合的情况下(非常小的数据集,大型字典),"随机" 算法是一个很好的替代方案。
-ONE_HOT
: 独热编码。找到形式为 "属性 == 参数" 的最佳分类分割。此方法类似于(但更高效)将每个可能的分类值转换为布尔特征。此方法可用于比较目的,通常表现不如其他替代方案。
-RANDOM
: 在一组随机候选中找到最佳分割。使用随机搜索找到形式为 "值 ∈ 掩码" 的分类分割。此解决方案可以看作是 CART 算法的近似。此方法是 CART 的强有力替代方案。此算法灵感来自 "随机森林" 2001 年 "5.1 分类变量" 部分。
categorical_set_split_greedy_sampling
-
类型: 实数 默认值: 0.1 可能值: 最小值:0 最大值:1
-
对于分类集分割,例如文本。分类值成为正集候选的概率。采样在每个节点应用一次(即不是在贪婪优化的每一步)。
categorical_set_split_max_num_items
-
类型: 整数 默认值: -1 可能值: 最小值:-1
-
对于分类集分割,例如文本。最大项目数(采样前)。如果有更多项目可用,则忽略最不频繁的项目。更改此值类似于在加载数据集之前更改 "max_vocab_count",但有以下例外:使用
max_vocab_count
,所有剩余项目被分组到一个特殊的 Out-of-vocabulary 项目中。使用max_num_items
,情况并非如此。
categorical_set_split_min_item_frequency
-
类型: 整数 默认值: 1 可能值: 最小值:1
-
对于分类集分割,例如文本。项目被考虑的最小出现次数。
growing_strategy
-
类型: 分类 默认值: LOCAL 可能值: LOCAL, BEST_FIRST_GLOBAL
-
如何生长树。
-LOCAL
: 每个节点独立于其他节点进行分割。换句话说,只要节点满足分割的 "约束条件"(例如最大深度、最小观察数),节点就会被分割。这是生长决策树的 "经典" 方式。
-BEST_FIRST_GLOBAL
: 在树的所有节点中选择损失减少最佳的节点进行分割。此方法也称为 "最佳优先" 或 "叶向生长"。有关更多详细信息,请参见 "最佳优先决策树学习",Shi 和 "加性逻辑回归:提升的统计视角",Friedman。
honest
-
类型: 分类 默认值: false 可能的值: true, false
-
在诚实树中,使用不同的训练样本来推断结构和叶值。这种正则化技术通过交换样本以获得偏差估计。它可能会增加或减少模型的质量。参见“广义随机森林”,Athey等人。在这篇论文中,诚实树是通过随机森林算法进行训练的,采用不放回抽样。
honest_fixed_separation
-
类型: 分类 默认值: false 可能的值: true, false
-
仅适用于诚实树,即honest=true。如果为true,则为每棵树生成一个新的随机分离。如果为false,则所有树使用相同的分离(例如,在包含多棵树的梯度提升树中)。
honest_ratio_leaf_examples
-
类型: 实数 默认值: 0.5 可能的值: 最小值:0 最大值:1
-
仅适用于诚实树,即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
-
类型: 整数 默认值: 16 可能的值: 最小值:-1
-
树的最大深度。
max_depth=1
表示所有树都将是根节点。max_depth=-1
表示树的深度不受此参数限制。值<= -2将被忽略。
max_num_nodes
-
类型: 整数 默认值: 31 可能的值: 最小值:-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 可能的值: 最小值: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 可能的值: 最小值:1
-
节点中的最小样本数。
missing_value_policy
-
类型: 分类 默认值: GLOBAL_IMPUTATION 可能的值: GLOBAL_IMPUTATION, LOCAL_IMPUTATION, RANDOM_LOCAL_IMPUTATION
-
处理缺失属性值的方法。
-GLOBAL_IMPUTATION
: 缺失的属性值用整个数据集上的均值(对于数值属性)或最频繁项(对于分类属性)进行填补(即数据规范中包含的信息)。
-LOCAL_IMPUTATION
: 缺失的属性值用当前节点训练样本上的均值(数值属性)或最频繁项(分类属性)进行填补。
-RANDOM_LOCAL_IMPUTATION
: 缺失的属性值从当前节点训练样本中随机抽样进行填补。该方法由Clinic等人在“随机生存森林”中提出(https://projecteuclid.org/download/pdfview_1/euclid.aoas/1223908043)。
num_candidate_attributes
-
类型: 整数 默认值: -1 可能的值: 最小值:-1
-
每个节点测试的唯一有效属性数量。一个属性如果至少有一个有效分割,则被视为有效。如果
num_candidate_attributes=0
,则设置为随机森林的经典默认值:分类情况下为sqrt(输入属性数量)
,回归情况下为输入属性数量 / 3
。如果num_candidate_attributes=-1
,则测试所有属性。
num_candidate_attributes_ratio
-
类型: 实数 默认值: -1 可能的值: 最小值:-1 最大值: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
-
类型: 分类 默认值: 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 可能的值: 最小值: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 可能值: 最小值: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(num_features)。(经典)GBDT 的复杂度大致与num_projections_exponent=1
成正比,因为它在分割时考虑了所有特征。
论文 "Sparse Projection Oblique Random Forests"(Tomita 等人,2020)建议值在 [1/4, 2] 之间。
sparse_oblique_projection_density_factor
-
类型: 实数 默认值: 2 可能值: 最小值: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
: 来自 "Classification Based on Multivariate Contrast Patterns",Canete-Sifuentes 等人,2029 的多类 Hellinger 线性判别分割。
uplift_min_examples_in_treatment
-
类型: 整数 默认值: 5 可能值: 最小值:0
-
仅适用于提升模型。节点中每个处理的示例最小数量。
uplift_split_score
-
类型: 分类 默认值: KULLBACK_LEIBLER 可能的值: KULLBACK_LEIBLER, KL, EUCLIDEAN_DISTANCE, ED, CHI_SQUARED, CS, CONSERVATIVE_EUCLIDEAN_DISTANCE, CED
-
仅适用于提升模型。分裂器得分,即分裂器优化的得分。这些得分在“针对单一和多重处理的提升模型决策树”中由Rzepakowski等人引入。符号:
p
正结果的概率/平均值,q
对照组的概率/平均值。
-KULLBACK_LEIBLER
或KL
: - p log (p/q)
-EUCLIDEAN_DISTANCE
或ED
: (p-q)^2
-CHI_SQUARED
或CS
: (p-q)^2/q
validation_ratio
-
类型: 实数 默认值: 0.1 可能的值: 最小值:0 最大值:1
-
用于创建验证数据集以修剪树的训练数据集的比例。如果设置为0,则整个数据集用于训练,并且不对树进行修剪。
DISTRIBUTED_GRADIENT_BOOSTED_TREES
梯度提升树学习算法的精确分布式版本。有关GBTs的介绍,请参阅非分布式梯度提升树学习算法的文档。
Protobuffer训练配置
超参数protobuffers用于C++和CLI API。
- learner/abstract_learner.proto
- learner/decision_tree/decision_tree.proto
- learner/distributed_gradient_boosted_trees/distributed_gradient_boosted_trees.proto
- learner/gradient_boosted_trees/gradient_boosted_trees.proto
超参数
apply_link_function
-
类型: 分类 默认值: 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”个箱进行近似。此参数将影响模型训练。
max_depth
-
类型: 整数 默认值: 6 可能的值: 最小值:-1
-
树的最大深度。
max_depth=1
表示所有树都将是根节点。max_depth=-1
表示树的深度不受此参数限制。值 <= -2 将被忽略。
max_unique_values_for_discretized_numerical
-
类型: 整数 默认值: 16000 可能的值: 最小值:1
-
允许预离散化的数值特征的最大唯一值数量。在大型数据集中,具有少量唯一值的离散化数值特征比经典的/非离散化的数值特征更高效。此参数不影响最终模型。然而,它可以加快或减慢训练速度。
maximum_model_size_in_memory_in_bytes
- 类型: 实数 默认值: -1
- 限制模型在内存中存储时的尺寸。不同的算法可以以不同的方式强制执行此限制。请注意,当模型被编译为推理时,推理引擎的尺寸通常比原始模型小得多。
maximum_training_duration_seconds
-
类型: 实数 默认值: -1
-
模型训练的最大持续时间,以秒为单位表示。每个学习算法可以自由使用此参数,视其需要而定。启用最大训练持续时间会使模型训练变得非确定性。
min_examples
-
类型: 整数 默认值: 5 可能的值: 最小值:1
-
节点中的最小样本数。
num_candidate_attributes
-
类型: 整数 默认值: -1 可能的值: 最小值:-1
-
每个节点测试的唯一有效属性数量。一个属性如果至少有一个有效分割,则被视为有效。如果
num_candidate_attributes=0
,则设置为随机森林的经典默认值:分类情况下为sqrt(输入属性数量)
,回归情况下为输入属性数量 / 3
。如果num_candidate_attributes=-1
,则测试所有属性。
num_candidate_attributes_ratio
-
类型: 实数 默认值: -1 可能的值: 最小值:-1 最大值:1
-
每个节点测试的属性比例。如果设置,等同于
num_candidate_attributes = 输入特征数量 x num_candidate_attributes_ratio
。可能的值在 ]0, 1] 之间以及 -1。如果未设置或等于 -1,则使用num_candidate_attributes
。
num_trees
-
类型: 整数 默认值: 300 可能的值: 最小值:0
-
决策树的最大数量。如果启用了早停机制,实际训练的树的数量可能会更少。
pure_serving_model
-
类型: 分类 默认值: false 可能的值: true, false
-
从模型中清除任何非服务所需的信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减少(常见的是减少50%的模型大小)。此参数对模型的质量、服务速度或内存使用没有影响。
random_seed
-
类型: 整数 默认值: 123456
-
模型训练的随机种子。学习器应通过随机种子实现确定性。
shrinkage
-
类型: 实数 默认值: 0.1 可能的值: 最小值:0 最大值:1
-
应用于每棵树预测的系数。较小的值(如0.02)往往能给出更准确的结果(假设训练了足够多的树),但会导致更大的模型。类似于神经网络的学习率。DART模型固定为1.0。
use_hessian_gain
-
类型: 分类 默认值: false 可能的值: true, false
-
使用时,采用包含Hessian项的分割增益公式,即优化分割以最小化“梯度/Hessian”的方差。除回归外的所有损失均可用。
worker_logs
-
类型: 分类 默认值: true 可能的值: true, false
-
如果为真,工作节点将打印训练日志。
ISOLATION_FOREST
Isolation Forest 是一种由决策树组成的集合,这些树在没有标签的情况下独立训练以划分特征空间。Isolation Forest的预测是一个异常分数,指示样本是否来自与训练数据相同的分布。 训练示例。我们同时将Isolation Forest称为刘等人提出的原始算法及其扩展。
Protobuffer训练配置
超参数protobuffers用于C++和CLI API。
- learner/abstract_learner.proto
- learner/decision_tree/decision_tree.proto
- learner/isolation_forest/isolation_forest.proto
超参数
max_depth
-
类型: 整数 默认值: -2 可能值: 最小值:-2
-
树的最大深度。
max_depth=1
表示所有树都将是根节点。max_depth=-1
表示树的深度不受此参数限制。max_depth=-2
表示最大深度为log2(每棵树采样的示例数量)(默认值)。
min_examples
-
类型: 整数 默认值: 5 可能值: 最小值:1
-
节点中的最小示例数量。
num_trees
-
类型: 整数 默认值: 300 可能值: 最小值: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 可能值: 最小值:0
-
投影的密度作为特征数量的指数。对于每个投影,每个特征被考虑在投影中的概率为“projection_density_factor / num_features”。
论文“Sparse Projection Oblique Random Forests”(Tomita et al, 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
-
考虑用于数值特征的分割结构。
-AXIS_ALIGNED
:轴对齐分割(即一次一个条件)。这是训练树的“经典”方式。默认值。
-SPARSE_OBLIQUE
:稀疏斜向分割(即在小部分特征上的随机分割),来自“稀疏投影斜向随机森林”,Tomita 等人,2020。这包括“扩展隔离森林”(Sahand Hariri 等人,2018)中描述的分割。
subsample_count
-
类型: 整数 默认值: 256 可能值: 最小值:0
-
用于生长每棵树的样本数量。只能设置“subsample_ratio”和“subsample_count”中的一个。默认情况下,每棵树采样256个样本。请注意,除非显式设置max_depth,否则此参数还会将树的最大深度限制为log2(每棵树使用的样本数)。
subsample_ratio
-
类型: 实数 默认值: 1 可能值: 最小值:0
-
用于生长每棵树的训练样本比例。只能设置“subsample_ratio”和“subsample_count”中的一个。默认情况下,每棵树采样256个样本。请注意,除非显式设置max_depth,否则此参数还会将树的最大深度限制为log2(每棵树使用的样本数)。
HYPERPARAMETER_OPTIMIZER
Protobuffer 训练配置
超参数 protobuffers 用于 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
-
模型训练的随机种子。学习器应通过随机种子实现确定性。