https://catboost.ai/en/docs/concepts/parameter-tuning
https://www.codenong.com/cs106234234/

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就越积极。
grow_policy 树生长策略。定义如何执行贪婪树的构建。可能的值:
- SymmetricTree — 逐级构建树,直到达到指定的深度。在每次迭代中,以相同条件分割最后一棵树级别的所有叶子。生成的树结构始终是对称的。
- Depthwise - 逐级构建一棵树,直到达到指定的深度。在每次迭代中,将拆分来自最后一棵树的所有非终端叶子。每片叶子均按条件分割,损失改善最佳。
- Lossguide- 逐叶构建一棵树,直到达到指定的最大叶数。在每次迭代中,将损失损失最佳的非终端叶子进行拆分。
注意:不能使用PredictionDiff特征重要性来分析使用Depthwise和Lossguide增长策略的生成模型,只能将其导出到json和cbm。

One-hot encoding

在预处理期间不要使用单热编码。这会影响训练速度和由此产生的质量。
有时,当分类功能没有大量的值时,一次性编码很好。
通常,单热编码不会显着提高模型的质量。但如果需要,请使用内置参数而不是预处理数据集。
Parameters
Command-line version parameters: —one-hot-max-size
Python parameters: one_hot_max_size
R parameters: one_hot_max_size

Description

使用一个热编码的所有分类功能,其中多个不同的值小于或等于给定的参数值。对于此类特征,不计算CTR。
Default value
The default value depends on various conditions:

  • N/A if training is performed on CPU in Pairwise scoring modeRead more about Pairwise scoringThe following loss functions use Pairwise scoring:Pairwise scoring is slightly different from regular training on pairs, since pairs are generated only internally during the training for the corresponding metrics. One-hot encoding is not available for these loss functions.
    • YetiRankPairwise
    • PairLogitPairwise
    • QueryCrossEntropy
  • 255 if training is performed on GPU and the selected Ctr types require target data that is not available during the training
  • 10 if training is performed in Ranking mode
  • 2 if none of the conditions above is met

    Number of trees
    树数

    建议在调整任何其他参数之前检查没有明显的欠拟合或过度拟合。为此,必须分析验证数据集上的指标值并选择适当的迭代次数。
    这可以通过将迭代次数设置为较大的值,使用过拟合检测器参数并打开使用最佳模型选项来完成。在这种情况下,生成的模型仅包含第一个最佳迭代,其中是验证数据集上具有最佳损失值的迭代。kk
    此外,用于选择最佳模型的指标可能与用于优化目标值的指标不同。例如,可以将优化函数设置为 Logloss,并将 AUC 函数用于过拟合检测器。为此,请使用评估指标参数。

    iterations

    命令行版本参数:,-i—iterations
    Python 参数: —iterations
    R 参数: —iterations
    解决机器学习问题时可以构建的最大树数。
    使用限制迭代次数的其他参数时,最终的树数可能小于此参数中指定的数目。

    use-best-model

    命令行版本参数: —use-best-model
    Python 参数: —use-best-model
    R 参数: —use-best-model
    如果设置了此参数,则保存在结果模型中的树数定义如下:
  1. 构建由训练参数定义的树的数量。
  2. 使用验证数据集标识具有 () 中指定的指标的最佳值的迭代。—eval-metric—eval-metric

此迭代后不会保存任何树。
此选项需要提供验证数据集。

eval-metric

命令行版本参数: —eval-metric
Python 参数: —eval-metric
R 参数: —eval-metric
用于过拟合检测(如果启用)和最佳模型选择(如果启用)的指标。某些指标支持可选参数(有关每个指标的详细信息,请参阅目标和指标部分)。
格式:
支持的指标
例子:
R2

od_type

命令行版本参数:过拟合检测设置
命令行版本参数: —od-type
Python 参数: od_type
R 参数: od_type
要使用的过拟合检测器的类型。
可能的值:

  • IncToDec
  • Iter

    od_pval

    命令行版本参数: —od-pval
    Python 参数: od_pval
    R 参数: od_pval
    IncToDec 过拟合检测器类型的阈值。达到指定值时,训练将停止。要求输入验证数据集。
    为获得最佳效果,建议在范围内设置一个值[[10^{–10}; 10^{-2}]
    值越大,越早检测到过拟合。
    警报
    不要将此参数与迭代过拟合检测器类型一起使用。

    od_wait

    命令行版本参数: —od-wait
    Python 参数: od_wait
    R 参数: od_wait
    在具有最佳指标值的迭代后继续训练的迭代次数。
    此参数的用途因所选的过拟合检测器类型而异:

  • IncToDec — 在达到阈值时忽略过拟合检测器,并在具有最佳指标值的迭代后继续学习指定的迭代次数。

  • Iter — 考虑模型过度拟合,并在自具有最佳指标值的迭代以来的指定迭代次数后停止训练。

    学习率

    此设置用于减少渐变步长。它会影响训练的总体时间:值越小,训练所需的迭代次数就越多。根据性能预期选择值。
    默认情况下,学习速率是根据数据集属性和迭代次数自动定义的。自动定义的值应接近最佳值。
    根据过拟合结果调整学习速率的可能方法:

  • 在训练的最后一次迭代中没有过度拟合(训练不收敛) - 提高学习率。

  • 检测到过度拟合 — 降低学习速率。

命令行版本参数:,-w—learning-rate
Python 参数: learning_rate
R 参数: learning_rate

树深Tree depth

在大多数情况下,最佳深度范围为 4 到 10。建议使用介于 6 到 10 之间的值。
注意
在 GPU 上执行训练时,对于成对模式(YetiRank、PairLogitPairwise 和 QueryCrossEntropy),树的最大深度限制为 8。
参数
命令行版本参数:,-n—depth
Python 参数: depth
R 参数: depth
树的深度。支持的值的范围取决于处理单元类型和所选损失函数的类型:

  • CPU — 最多 16 的任意整数。
  • GPU — 最多 8 个成对模式(YetiRank、PairLogitPairwise 和 QueryCrossEntropy)的任何整数,所有其他损失函数最多 16 个整数


L2 正则化

为正则化器尝试不同的值,以找到最佳值。
参数
命令行版本参数: —l2-leaf-reg
Python 参数: l2_leaf_reg
R 参数: l2_leaf_reg


成本函数的 L2 正则化项处的系数。
允许任何正值。

随机强度 random_strength

尝试为参数设置不同的值。random_strength
参数
命令行版本参数: —random-strength
Python 参数: random_strength
R 参数: random_strength
选择树结构时用于评分拆分的随机性量。使用此参数可避免过度拟合模型。
选择拆分时使用此参数的值。在每次迭代中,每个可能的拆分都会获得一个分数(例如,分数指示添加此拆分将在多大程度上改进训练数据集的损失函数)。选择得分最高的拆分。
分数没有随机性。正态分布随机变量将添加到要素的分数中。它的均值为零,方差在训练期间减小。此参数的值是方差的乘数。
以下损失函数不支持此参数:

  • QuQueryCrossEntropy
  • YetiRankPairwise
  • PairLogitPairwise

    Bagging temperature

    尝试为参数设置不同的值bagging_temperature
    参数
    命令行版本参数: —bagging-temperature
    Python 参数: bagging_temperature
    R 参数: bagging_temperature


    定义贝叶斯引导程序的设置。默认情况下,它在分类和回归模式下使用。
    使用贝叶斯引导为对象分配随机权重。
    如果此参数的值设置为 1,则从指数分布中对权重进行采样。如果此参数的值设置为 0,则所有权重都等于 1。
    可能的值在范围内[0; \inf)[0;inf).值越高,装袋越激进。
    如果选定的引导类型为贝叶斯,则可以使用此参数

    Border count边框计数

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

  • 中央处理器: 254

  • PairLogitPairwise 和 YetiRankPairwise 模式中的 GPU:32
  • 所有其他模式下的 GPU:128

此参数的值会显著影响 GPU 上的训练速度。值越小,执行训练的速度就越快(有关详细信息,请参阅数值特征的拆分次数部分)。
对于许多数据集来说,128 个拆分就足够了。但是,如果需要最佳质量,请在 GPU 上训练时将此参数的值设置为 254。
此参数的值不会显著影响 CPU 上的训练速度。尝试将其设置为 254 以获得最佳质量。
参数
命令行版本参数:,-x—border-count
Python 参数: bordercount
别名:_max_bin
R 参数: border_count


建议值最大为 255。较大的值会减慢训练速度。
数值要素的分割数。允许的值是从 1 到 65535 的整数(包括 1 和 65535)。

内部数据集顺序Internal dataset order

如果数据集中的对象按所需顺序给出,请使用此选项。在这种情况下,在将分类要素转换为数值要素选择树结构阶段期间,不会执行随机排列。
参数
命令行版本参数: —has-time
Python 参数: —has-time
R 参数: —has-time
使用输入数据中对象的顺序(在将分类要素转换为数值要素选择树结构阶段期间,不要执行随机排列)。
时间戳列类型用于确定对象的顺序(如果在输入数据中指定)。

树木生长政策

默认情况下,CatBoost 使用对称树,如果增长策略设置为对称树,则会生成对称树。
这些树是逐级建造的,直到达到指定的深度。在每次迭代中,最后一个树层的所有叶子都以相同的条件进行拆分。生成的树结构始终是对称的。
对称树具有非常好的预测速度(大约比非对称树快 10 倍),并且在许多情况下具有更好的质量。
但是,在某些情况下,其他树木生长策略可以比种植对称树木产生更好的结果。
尝试分析使用不同生长树木策略获得的结果。
细节:默认情况下使用的对称树可以更快地应用(最多快10倍)。
参数

grow_policy


命令行版本参数: —grow-policy
Python 参数: grow_policy
R 参数: grow_policy
树木生长政策。定义如何执行贪婪的树构造。
可能的值:

  • SymmetricTree — 在达到指定深度之前,逐级构建树。在每次迭代中,最后一个树层的所有叶子都以相同的条件进行拆分。生成的树结构始终是对称的。
  • Depthwise — 在达到指定深度之前,逐级构建树。在每次迭代中,将拆分上一个树级别中的所有非终端叶子。每片叶子都按条件分开,具有最佳的损失改善。注意具有此增长策略的模型无法使用 PredictionDiff 特征重要性进行分析,只能导出为 json 和 cbm。
  • Lossguide — 一棵树一片叶子一片叶子地建造,直到达到指定的最大叶子数。在每次迭代中,具有最佳损耗改善的非终端叶子被拆分。注意具有此增长策略的模型无法使用 PredictionDiff 特征重要性进行分析,只能导出为 json 和 cbm。

    min_data_in_leaf

    命令行版本参数: —min-data-in-leaf
    Python 参数: min_data_in_leaf
    R 参数: min_data_in_leaf
    描述述叶中训练样本的最小数目。CatBoost 不会在样本计数小于指定值的叶子中搜索新的拆分。
    只能与 Lossguide 和 Depthwise 增长策略一起使用。

    max_leaves

    命令行版本参数: —max-leaves
    Python 参数: maxleaves
    别名:_num_leaves
    R 参数: max_leaves
    生成的树中的最大叶子数。只能与 Lossguide 增长策略一起使用。

黄金特征Golden features

如果数据集具有一个特征,该特征是结果的强预测因子,则该特征的预量化可能会减少模型可以从中获得的信息。建议对此功能使用更多数量的边框 (1024)。

超参数搜索的方法

Python 包提供网格和随机搜索方法,用于搜索最佳参数值,以便使用给定数据集训练模型。
参数

方法 描述
CatBoost grid_search 对模型的指定参数值进行简单的网格搜索。
CatBoost randomized_search 对超参数的简单随机搜索。
CatBoostClassifier grid_search 对模型的指定参数值进行简单的网格搜索。
CatBoostClassifier randomized_search 对超参数的简单随机搜索。
CatBoostRegressor grid_search 对模型的指定参数值进行简单的网格搜索。
CatBoostRegressor randomized_search 对超参数的简单随机搜索。

通过 optuna 进行超参数搜索的方法

Optuna是一个著名的超参数优化框架。
Optuna 采用最先进的算法对超参数进行采样并有效地修剪无希望的试验,从而实现高效的超参数优化。
Catboost 支持通过迭代后回调功能来停止对超参数的无期望试用。拉取请求
下面是一个 optuna 示例,演示了 CatBoost 的修剪器。