CatBoost – ML
Gradient Boosting是一种集成机器学习算法,通常用于解决分类和回归问题。它易于使用并且适用于异构数据甚至相对较小的数据。它本质上是从许多弱学习器的集合中创建一个强学习器。
CatBoost或 Categorical Boosting 是由 Yandex 开发的开源提升库。除了回归和分类,CatBoost 还可以用于排名、推荐系统、预测甚至个人助理。
现在,梯度提升采用加法形式,它迭代地构建一系列近似值以贪婪的方式,给定一个损失函数 .这里我们要强调的是,损失函数有两个输入值,第 i个预期输出值 y i和第 t个估计 y i的函数F t 。假设我们已经构建了函数F t我们可以通过找到另一个函数来改进我们对 y i的估计 , 在哪里是步长和函数是从函数族 H 中选择的基本预测器,以最小化预期损失。那是, .最小化是通过使用泰勒近似或负梯度来实现的,这样, . CatBoost 对这种梯度提升技术进行了改进。
假设有一个包含 n 个样本的数据集 D。每个样本在向量 x 中具有 m 组特征,以及一个实值目标 y。
处理分类特征:
数据集通常包含分类特征,并且有多种技术可以处理提升树中的分类特征。与其他梯度提升算法(需要数字数据)不同,CatBoost自动处理分类特征。处理分类数据的最常用技术之一是单热编码,但它在许多特征下变得不可行。为了解决这个问题,特征按目标统计数据分组(估计每个类别的目标值)。目标统计数据可以用不同的方式计算:贪婪、坚持、留下一个和有序。 CatBoost 使用有序目标统计数据。
贪心方法取一个类别组的目标的平均值。但是它会受到目标泄漏的影响,因为目标值被用来计算分类变量的表示,然后使用这些特征进行预测( 使用目标计算 )。 Holdout 方法试图通过对训练数据集进行分区来减少这种情况。但这显着降低了训练数据的有效利用。留一个排除目标样本但不是很有效。有序目标统计的灵感来自在线学习算法,该算法按时间顺序获取训练示例。它引入了人工时间,即随机排列的训练示例。它将只依赖过去遇到的训练样本(样本在人工时间内出现在该特定样本之前),从而避免目标泄漏。
在数学上,D 的第 k 个元素的第 i 个分类变量的目标估计可以表示为,
, 其中 a>0
指标函数当 CatBoost 的输入向量 x j的第 i个分量等于输入向量 x k的第 i个分量时,取值为 1。这里我们根据我们在 D 上的随机排列顺序使用 k 作为第 k 个元素 ,并且 i 取整数值 1 到 k−1。参数 a 和 p (prior) 使方程免于下溢。 if 条件确保在对值进行编码时在 x i的值的计算中排除 y k的值 .该技术还确保使用每个示例的所有可用过去来计算其目标统计数据,从而对分类变量进行编码。
有序提升
梯度提升算法通常有过拟合的倾向。由于集成在同一数据集上的基础学习器上迭代构建,因此会影响模型的泛化能力。
当我们使用有序目标统计量对分类变量进行编码时,损失函数L 相对于函数F t-1的偏导数(梯度)也是一个随机变量,因为我们使用了随机排列选择 D k的元素来编码影响 F t-1值的分类变量。因此,梯度的分布可以在我们计算的条件下移动使用特定的编码 .这种条件转移导致我们对 h t的估计存在偏差,这会对我们在评估数据上的 F t-1时获得的指标产生负面影响,我们在训练时没有使用。这种对 F t-1的影响称为其泛化能力,该问题称为预测偏移。
CatBoost 引入了有序提升来避免这个问题。在有序提升中,执行训练样例的随机排列并维护 n 个不同的支持模型(仅使用排列中的前i个样本训练的第 i个模型),并且在每个步骤中通过使用先前的模型残差获得残差/误差。但这是不可行的,因为数据是有限的,并且维护不同模型的内存要求太高。
因此 CatBoost 出于实际目的使用了一个变体。在这个变体中,所有模型共享一个树结构(分裂特征序列)。即,CatBoost 使用与确定有序目标统计量相同的 D k作为确定结构或拟合决策树 h t的数据,并使用完整数据集 D 作为评估 h t是否为决策树的数据从而最小化预期损失。它使用多个排列计算可用于查找 h 的残差值集,以获得 F t-1 ,并保证不使用 的任何值来计算梯度值。从而减少梯度估计的方差(损失函数的变化率)并避免预测偏移。
CatBoost 优势
- CatBoost 实现了遗忘决策树(二叉树,其中使用相同的特征对树的每一层进行左右拆分),从而将每层拆分的特征限制为一个,这有助于减少预测时间。
- 它通过有序的目标统计数据有效地处理分类特征。
- 它很容易与 R 和Python中的包一起使用。
- 它可以有效地使用默认参数,从而减少参数调整所需的时间。
参考:
paper.nips.cc/paper/2018