本文翻译至官方原文:https://catboost.ai/docs/concepts/parameter-tuning.html
CatBoost为参数调整提供了灵活的界面,可以对其进行配置以适合不同的任务。
本节包含有关可能的参数设置的一些提示。
catBoost提供了为Python、R语言和命令行都提供了可使用的参数,其中Python和R的完全相同,命令行参数格式则有点不同。
如L2正则化参数,python和R中为:l2_leaf_reg ,命令行中为–l2-leaf-reg
注意:预处理期间请勿使用One-hot编码!这会影响训练速度和结果质量。
当分类特征没有很多值时,One-hot编码效果很好。通常One-hot编码不会显着提高模型的质量。但是如果需要,请使用内置参数,而不要预处理数据集。
Python参数 | 描述 | 默认值 |
---|---|---|
one_hot_max_size | 对类别数量小于或等于此参数值的类别特征进行One-hot编码。此类特征不能计算Ctrs。 | 默认值取决于各种条件: - 在CPU上用Pairwise scoring模式进行训练时,默认N/A; - 在GPU上训练,同时所选的Ctr类型需要目标数据在训练期间不可用时,默认255; - 在Ranking模式下训练,默认10 -如果以上条件都不满足,默认2 |
建议在调整任何其他参数之前检查是否没有明显的过拟合或欠拟合。为此,有必要分析验证数据集上的指标值并选择适当的迭代次数。
这可以通过将 i t e r a t i o n s iterations iterations 迭代次数设置为较大的值,**使用 $ overfitting detector$ 过拟合检测器参数并启用$ use best model $“ 使用最佳模型”选项来完成。**在这种情况下,结果模型仅包含前k个最佳迭代,其中k是验证数据集上具有最佳损失值的迭代。
同样,用于选择最佳模型的度量可能不同于用于优化目标值的度量。例如,可以将优化功能设置为 Logloss,并将AUC功能用于过拟合检测器。为此,请使用$ evaluation metric$评估指标参数。
Python参数 | 描述 |
---|---|
iterations | 可以建立的最大树数。当使用其他限制迭代次数的参数时,树的最终数量可能少于此参数中指定的数量。 |
use_best_model | 如果设置了此参数,则在结果模型中保存的树数定义如下: 1.建立训练参数定义的树木数量。 2.使用验证数据集以 − − e v a l − m e t r i c --eval-metric −−eval−metric(eval_metric)中指定的指标的最佳值来标识迭代 。 在此迭代之后,不会保存任何树。此选项需要提供验证数据集。 |
eval_metric | 如果启用,则用于过度拟合检测和最佳模型选择的度量。某些指标支持可选参数(有关每个指标的详细信息,请参见“ 目标和指标”部分)。 格式:
支持的指标 例子: R2 Quantile:alpha=0.3 |
Overfitting detection settings
Python参数 | 描述 |
---|---|
od_type | 要使用的过拟合检测器的类型。可能的值:‘IncToDec’、‘Iter’ |
od_pval | IncToDec o v e r f i t t i n g d e t e c t o r overfitting detector overfittingdetector类型的阈值 。达到指定值时,训练将停止。要求输入验证数据集。 为了获得最佳效果,建议在范围内设置一个值。值越大,越早检测到过度拟合。 请勿将此参数与Iter过拟合检测器类型一起使用! 也就是(od_type = Iter) |
od_wait | 在迭代之后以最佳度量值继续训练的迭代次数。此参数的用途因所选的过拟合检测器类型而异: 1.IncToDec —达到阈值时忽略过拟合检测器,并在迭代后使用最佳度量值继续学习指定的迭代次数。 2.Iter —考虑模型过度拟合,并且自从具有最佳度量值的迭代以来,在指定的迭代次数后停止训练。 |
此设置用于减小梯度步长。它影响训练的总时间:值越小,训练所需的迭代次数越多。根据性能期望选择值。
默认情况下,学习率是根据数据集属性和迭代次数自动定义的。自动定义的值应接近最佳值。
根据拟合结果来调整学习率的方法:
Python参数 | 描述 |
---|---|
learning_rate | 学习率。用于减少梯度步长。 |
在大多数情况下,最佳深度范围是4到10。建议的值是6到10。
注意:
当在GPU执行训练,且使用pairwise 模式 (YetiRank, PairLogitPairwise 和 QueryCrossEntropy) 时,树的最大深度限制为 8
Python参数 | 描述 |
---|---|
depth | 树的深度。支持值的范围取决于处理单元类型和所选损失函数的类型: - CPU —最大16 。 - GPU — pairwise模式下最大为8,其他损失函数最大16 |
为正则化器尝试其他值以找到最佳可能。
Python参数 | 描述 |
---|---|
l2_leaf_reg | 代价函数的L2正则化项的系数。允许任何正值。 |
尝试为random_strength
参数设置不同的值 。
Python参数 | 描述 |
---|---|
random_strength | 选择树结构时,用于对分裂打分的随机性强度。使用此参数可以避免模型过度拟合。选择拆分点时使用此参数的值。在每次迭代中,每个可能的拆分点都会得到一个分数(例如,该分数表示添加此拆分将改善训练数据集的损失函数的程度)。选择得分最高的拆分。分数没有随机性。将正态分布的随机变量添加到特征的分数。在训练过程中,它的平均值为零,并且方差不断减小。 此参数的值就是方差的乘数。 注意:以下损失函数不支持此参数: - QueryCrossEntropy - YetiRankPairwise - PairLogitPairwiae |
尝试为bagging_temperature
参数设置不同的值
Python参数 | 描述 |
---|---|
bagging_temperature | 如果所选的bootstrap类型为Bayesian,则可以使用此参数。 定义贝叶斯bootstrap的设置。默认情况下,它用于分类和回归模式。使用贝叶斯bootstrap为对象分配随机权重。 如果此参数的值设置为“ 1”,则从指数分布中采样权重。 如果此参数的值设置为“ 0”,则所有权重等于1 。 可以在范围内[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTSrWtIA-1589951354751)(https://yastatic.net/doccenter/images/tech2.yandex.com/en/catboost/doc/freeze/aLAmutnrGJUj0pCid6PHtDlLvEY.svg)]取值。值越高,Bagging就越积极。 |
数值特征的分割数。默认值取决于处理单元类型和其他参数:
此参数的值会显着影响GPU上的训练速度,值越小,训练越快。
128个分割对于许多数据集就足够了。但是,如果需要最佳质量,则在GPU上进行训练时,尝试将此参数的值设置为254。
此参数的值不会显着影响CPU上的训练速度, 尝试将其设置为254,以获得最佳质量。
Python参数 | 描述 |
---|---|
border_count 别名: max_bin |
数值特征的分割数。允许的值是1到65535(含)之间的整数。建议值最大为255。较大的值会减慢训练速度。 |
如果数据集中的对象按要求的顺序给出,请使用此选项。在这种情况下,在将分类特征转换为数字特征并 选择树结构阶段的过程中,不会执行随机排列 。
Python参数 | 描述 |
---|---|
has_time | 使用输入数据中对象的顺序(在将分类特征转换为数字特征和选择树结构阶段期间,请勿执行随机排列)。如果在输入数据中指定了时间戳记列类型,则该列类型用于确定对象的顺序 。 |
默认情况下,CatBoost使用对称树,如果将增长策略设置为SymmetricTree,则将构建对称树。
此类树将逐级构建,直到达到指定的深度。在每次迭代中,以相同条件分割最后一棵树级别的所有叶子。生成的树结构始终是对称的。
对称树的预测速度非常好(大约比非对称树快10倍),并且在许多情况下可以提供更好的质量。
但是,在某些情况下,其他树木生长策略比生长对称树木可获得更好的结果。
尝试分析使用不同的树木生长策略获得的结果。
细节:默认情况下使用的对称树可以更快地应用(快10倍)。
Python参数 | 描述 |
---|---|
grow_policy | 树生长策略。定义如何执行贪婪树的构建。可能的值: - SymmetricTree — 逐级构建树,直到达到指定的深度。在每次迭代中,以相同条件分割最后一棵树级别的所有叶子。生成的树结构始终是对称的。 - Depthwise - 逐级构建一棵树,直到达到指定的深度。在每次迭代中,将拆分来自最后一棵树的所有非终端叶子。每片叶子均按条件分割,损失改善最佳。 - Lossguide- 逐叶构建一棵树,直到达到指定的最大叶数。在每次迭代中,将损失损失最佳的非终端叶子进行拆分。 注意:不能使用PredictionDiff特征重要性来分析使用Depthwise和Lossguide增长策略的生成模型,只能将其导出到json和cbm。 |
min_data_in_leaf* 别名:min_child_samples |
一片叶子中最少的训练样本数。CatBoost不会在样本计数小于指定值的叶子中搜索新的拆分。 只能与Lossguide和Depthwise增长策略一起使用。 |
max_leaves 别名:num_leaves |
生成的树中的最大叶子数。 只能与 Lossguide增长政策一起使用。 不建议使用大于64的值,因为它会大大减慢训练过程。 |
如果数据集具有golden feature,该特征的预量化可能会减少模型从中获得的信息。建议在此特征中使用更多的borders(1024)。
注意:不应为所有要素设置更多的borders。建议将其设置为具有一两个golden feature。
参数 | 描述 |
---|---|
per_float_feature_quantization | 指定特征或特征列表的量化描述。 单一功能的描述格式: FeatureId[:border_count=BorderCount][:nan_mode=BorderType][:border_type=border_selection_method] |
Examples:
per_float_feature_quantization='0:border_count=1024'
In this example, the feature indexed 0 has 1024 borders.
per_float_feature_quantization=['0:border_count=1024', '1:border_count=1024']
In this example, features indexed 0 and 1 have 1024 borders.
在给定数据集上训练模型,Python包提供网格和随机搜索方法与来寻找最优参数值。
类 | 方法 | 描述 |
---|---|---|
CatBoost | grid_search | 通过简单的网格搜索模型的指定参数值。 |
randomized_search | 对超参数的简单随机搜索。 | |
CatBoostClassifier | grid_search | 通过简单的网格搜索模型的指定参数值。 |
randomized_search | 对超参数的简单随机搜索。 | |
CatBoostRegressor | grid_search | 通过简单的网格搜索模型的指定参数值。 |
randomized_search | 对超参数的简单随机搜索。 |