CatBoost官方教程:调参

CatBoost官方教程:调参

本文翻译至官方原文:https://catboost.ai/docs/concepts/parameter-tuning.html

CatBoost为参数调整提供了灵活的界面,可以对其进行配置以适合不同的任务。

本节包含有关可能的参数设置的一些提示。

catBoost提供了为Python、R语言和命令行都提供了可使用的参数,其中Python和R的完全相同,命令行参数格式则有点不同。

如L2正则化参数,python和R中为:l2_leaf_reg ,命令行中为–l2-leaf-reg

文章目录

  • CatBoost官方教程:调参
    • One-hot编码
    • 树的数量
    • 学习率
    • 树的深度
    • L2正则化
    • Random strength
    • Bagging temperature
    • Border count
    • 内部数据集顺序
    • 树生长策略
    • Golden features
    • 超参数搜索方法

One-hot编码

注意:预处理期间请勿使用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

树的数量

建议在调整任何其他参数之前检查是否没有明显的过拟合或欠拟合。为此,有必要分析验证数据集上的指标值并选择适当的迭代次数。

可以通过将

iterationsiterations

iterations 迭代次数设置为较大的值,**使用 $ overfitting detector$ 过拟合检测器参数并启用$ use best model $“ 使用最佳模型”选项来完成。**在这种情况下,结果模型仅包含前k个最佳迭代,其中k是验证数据集上具有最佳损失值的迭代。

同样,用于选择最佳模型的度量可能不同于用于优化目标值的度量。例如,可以将优化功能设置为 Logloss,并将AUC功能用于过拟合检测器。为此,请使用$ evaluation metric$评估指标参数。

Python参数 描述
iterations 可以建立的最大树数。当使用其他限制迭代次数的参数时,树的最终数量可能少于此参数中指定的数量。
use_best_model 如果设置了此参数,则在结果模型中保存的树数定义如下:
1.建立训练参数定义的树木数量。
2.使用验证数据集以

??eval?metric--eval-metric

??eval?metric(eval_metric)中指定的指标的最佳值来标识迭代 。
在此迭代之后,不会保存任何树。此选项需要提供验证数据集。

eval_metric 如果启用,则用于过度拟合检测和最佳模型选择的度量。某些指标支持可选参数(有关每个指标的详细信息,请参见“ 目标和指标”部分)。
格式:[:=;..;=]
支持的指标
例子:
R2
Quantile:alpha=0.3

Overfitting detection settings

Python参数 描述
od_type 要使用的过拟合检测器的类型。可能的值:‘IncToDec’、‘Iter’
od_pval IncToDec

overfittingdetectoroverfitting detector

overfittingdetector类型的阈值 。达到指定值时,训练将停止。要求输入验证数据集
为了获得最佳效果,建议在范围img内设置一个值。值越大,越早检测到过度拟合。
请勿将此参数与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

L2正则化

为正则化器尝试其他值以找到最佳可能。

Python参数 描述
l2_leaf_reg 代价函数的L2正则化项的系数。允许任何正值

Random strength

尝试为random_strength参数设置不同的值 。

Python参数 描述
random_strength 选择树结构时,用于对分裂打分的随机性强度。使用此参数可以避免模型过度拟合。选择拆分点时使用此参数的值。在每次迭代中,每个可能的拆分点都会得到一个分数(例如,该分数表示添加此拆分将改善训练数据集的损失函数的程度)。选择得分最高的拆分。分数没有随机性。将正态分布的随机变量添加到特征的分数。在训练过程中,它的平均值为零,并且方差不断减小。
此参数的值就是方差的乘数。
注意:以下损失函数不支持此参数
- QueryCrossEntropy
- YetiRankPairwise
- PairLogitPairwiae

Bagging temperature

尝试为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就越积极。

Border count

数值特征的分割数。默认值取决于处理单元类型和其他参数:

  • CPU:254
  • GPU在PairLogitPairwise和YetiRankPairwise模式:32
  • 其他模式下的GPU:128

此参数的值会显着影响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 features

如果数据集具有golden feature,该特征的预量化可能会减少模型从中获得的信息。建议在此特征中使用更多的borders(1024)。

注意:不应为所有要素设置更多的borders。建议将其设置为具有一两个golden feature。

参数 描述
per_float_feature_quantization 指定特征或特征列表的量化描述。
单一功能的描述格式:FeatureId[:border_count=BorderCount][:nan_mode=BorderType][:border_type=border_selection_method]

Examples:

1
per_float_feature_quantization='0:border_count=1024'

In this example, the feature indexed 0 has 1024 borders.

1
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 对超参数的简单随机搜索。