CATBOOST算法总结
特殊点:
1.处理类别特征时,CatBoost引入了基于排序的目标编码(order-based target encoding)方法,避免了常见的类别特征高维问题和过拟合风险
排序数据:将数据按照某种顺序排列(如样本索引的顺序或时间戳顺序)。
递增计算均值:对于每一个类别,按顺序递增地计算其目标变量的均值。(只计算在这个排序之前的)
添加噪声:在计算均值时引入一定的噪声,以减少过拟合的风险。
优点:
防止目标泄漏:通过有序递增地计算均值,当前样本的目标变量不被用于其自身的编码,这有效地防止了目标泄漏。
减少过拟合:通过引入噪声,目标编码变得更加稳健,可以有效减少过拟合的风险。
适应类别特征:对于高基数的类别特征,这种方法尤其有效,因为它避免了one-hot编码导致的高维问题。
叶节点权重、分裂节点的计算方法也有更新
2.对称树(Symmetric Trees)结构,使得模型训练和预测更加高效,同时降低了内存消耗。
即所有的节点按照相同的规则进行分裂,确保树的结构对称。这种对称性使得树的结构更加规则和可预测。SymmetricTree特点如下:
对称结构:所有层的分裂点都相同,树的结构对称。
高效计算:对称结构使得计算过程更高效,因为可以进行向量化运算。
内存利用率高:由于结构固定,对称树的存储更加简洁,内存利用率高。
Depthwise 策略是一种逐层生长的方法,即每次扩展树的一层,选择当前层的所有节点进行分裂,也就是XGB的生长策略。这种方法通过在每层选择最优的分裂点,逐步增加树的深度。Depthwise特点如下:
逐层分裂:每一层的所有节点都参与分裂。
全局最优:每次选择全局最优的分裂点,逐层构建树。
Lossguide 策略是一种基于损失函数指导的生长方法。与Depthwise方法不同,Lossguide策略每次选择对整体损失函数影响最大的节点进行分裂,而不是逐层分裂。也就是LGBM的生长策略。Lossguide特点:
模型收缩:
模型收缩(Model Shrinkage)是CatBoost用于控制模型复杂度的一种技术,通过逐步减少模型中某些参数的影响,从而防止过拟合并提高模型的泛化能力。在CatBoost中,模型收缩涉及对叶节点权重的调整,通过设置model_shrink_rate和model_shrink_mode参数来实现。
model_shrink_rate
定义:model_shrink_rate 是一个控制模型收缩速率的参数。它表示每次迭代中,叶节点权重将按一定比例进行缩减。
model_shrink_mode
定义:model_shrink_mode 是一个控制模型收缩模式的参数。
可选值:
'Constant':以固定比例进行收缩。
'Decreasing':按逐渐减少的比例进行收缩。
默认值:默认为 'Constant'。
3.具有处理数据偏序问题的独特能力,能够在训练数据中有效防止目标泄漏(target leakage)
4.内置了多种损失函数
5.提供了丰富的特征重要性评估方法,便于用户进行特征解释和筛选。
catboost pool API:
封装数据的高效数据结构。它将特征数据、标签以及元数据信息(如类别特征、权重等)封装在一起,使得数据处理和模型训练更加高效和简便。Pool对象提供了一种结构化的方式来管理数据,特别是在处理包含大量类别特征的数据集时显得尤为重要。
使用场景:
高效数据传输和处理:Pool对象通过将数据和元数据信息封装在一起,减少了在训练和预测过程中数据传输的开销,提高了数据处理效率。
处理类别特征:CatBoost对类别特征的处理有独特的优化,Pool对象允许用户方便地指定和管理类别特征,从而提高模型的训练速度和预测准确性。
内存管理:在处理大规模数据集时,Pool对象通过高效的内存管理和数据存储方式,减少了内存占用,提高了训练和预测的效率,特别是在使用GPU加速时。
交叉验证功能:
from catboost import cv
核心参数如下:
pool: Pool对象,包含数据和标签。
params: 字典,包含模型参数设置。
nfold: 整数,与fold_count相同,是交叉验证的折数。
inverted: 布尔值,是否返回每次折叠的交叉验证结果。
stratified: 布尔值,是否进行分层抽样。
shuffle: 布尔值,是否在交叉验证之前对数据进行随机打乱。
partition_random_seed: 整数,数据分区的随机种子。
seed: 整数,与partition_random_seed相同,是数据分区的随机种子。
metric_period: 整数,评估指标计算的周期。
verbose: 布尔值,是否打印详细信息。