【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

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

树的数量

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

可以通过将 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 evalmetric(eval_metric)中指定的指标的最佳值来标识迭代 。
在此迭代之后,不会保存任何树。此选项需要提供验证数据集。
eval_metric如果启用,则用于过度拟合检测和最佳模型选择的度量。某些指标支持可选参数(有关每个指标的详细信息,请参见“ 目标和指标”部分)。
格式:<Metric>[:<parameter 1>=<value>;..;<parameter N>=<value>]
支持的指标
例子:
R2
Quantile:alpha=0.3

Overfitting detection settings

Python参数描述
od_type要使用的过拟合检测器的类型。可能的值:‘IncToDec’、‘Iter’
od_pvalIncToDec o v e r f i t t i n g d e t e c t o r overfitting 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:

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包提供网格和随机搜索方法与来寻找最优参数值。

方法描述
CatBoostgrid_search通过简单的网格搜索模型的指定参数值。
randomized_search对超参数的简单随机搜索。
CatBoostClassifiergrid_search通过简单的网格搜索模型的指定参数值。
randomized_search对超参数的简单随机搜索。
CatBoostRegressorgrid_search通过简单的网格搜索模型的指定参数值。
randomized_search对超参数的简单随机搜索。
  • 13
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CatBoost提供了一些参数来进行自动调参。其中一些重要的参数包括: 1. 学习率(learning_rate):学习率用于控制每个树的贡献程度。较小的学习率可以使模型更加稳定,但可能需要更多的迭代次数才能达到最佳性能。 2. 树的数量(num_trees):树的数量指定了要训练的决策树的数量。较大的树的数量可以提高模型的准确性,但也会增加训练时间。 3. 树的深度(depth):树的深度控制了每个决策树的复杂度。较深的树可以更好地拟合训练数据,但也容易过拟合。 4. L2正则化(l2_leaf_reg):L2正则化用于控制模型的复杂度。较大的正则化参数可以减少过拟合的风险。 5. 随机强度(random_strength):随机强度参数控制了每个决策树中随机选择特征的程度。较大的随机强度可以增加模型的多样性,减少过拟合的风险。 6. Bagging温度(bagging_temperature):Bagging温度参数控制了每个决策树在训练过程中对样本的采样程度。较小的温度值可以增加模型的多样性,减少过拟合的风险。 7. Border count(border_count):Border count参数用于控制特征值的离散化方式。较大的border count可以增加特征值的离散化程度,提高模型的准确性。 除了这些参数之外,CatBoost还提供了一些其他的超参数搜索方法,可以帮助自动调参,例如网格搜索、随机搜索等。通过调整这些参数,可以根据具体的数据集和问题来优化CatBoost模型的性能。\[2\] \[3\] #### 引用[.reference_title] - *1* [Catboost参数](https://blog.csdn.net/CSDNgaoqingrui/article/details/119414740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【catboost官方调参教程](https://blog.csdn.net/xiangxiang613/article/details/106234234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值