📜  CatBoost – ML

📅  最后修改于: 2022-05-13 01:54:51.057000             🧑  作者: Mango

CatBoost – ML

Gradient Boosting是一种集成机器学习算法,通常用于解决分类和回归问题。它易于使用并且适用于异构数据甚至相对较小的数据。它本质上是从许多弱学习器的集合中创建一个强学习器。

CatBoost或 Categorical Boosting 是由 Yandex 开发的开源提升库。除了回归和分类,CatBoost 还可以用于排名、推荐系统、预测甚至个人助理。

现在,梯度提升采用加法形式,它迭代地构建一系列近似值F^t   以贪婪的方式,给定一个损失函数\mathcal{L}(y_i,F^t) .这里我们要强调的是,损失函数有两个输入值,第 i预期输出值 y i和第 t估计 y i的函数F t 。假设我们已经构建了函数F t我们可以通过找到另一个函数来改进我们对 y i的估计F^t = F^{t-1}+ \alpha \cdot h^t   , 在哪里\alpha   是步长和函数h^t   是从函数族 H 中选择的基本预测器,以最小化预期损失。那是, h^t = \underset{h\epsilon H}{arg \; min} \; \mathbb{E} \mathcal L(y,F^{t-1}+h) .最小化是通过使用泰勒近似或负梯度来实现的,这样, h^t = \underset{h\epsilon H}{arg \; min} \; \mathbb{E} (\frac{\delta \mathcal Ly}{\delta F^{t-1}}-h)^2 \approx \underset{h\epsilon H}{arg \; min} \; \frac{1}{n} (\frac{\delta \mathcal Ly}{\delta F^{t-1}}-h)^2  . CatBoost 对这种梯度提升技术进行了改进。

假设有一个包含 n 个样本的数据集 D。每个样本在向量 x 中具有 m 组特征,以及一个实值目标 y。 Dataset\; \mathcal{D} = {x_k, y_k} ( |\mathcal{D}|=n,\; x_k\;\epsilon\;\mathbb{R}^m,\; y_k\; \epsilon\; \mathbb{R})

处理分类特征:

数据集通常包含分类特征,并且有多种技术可以处理提升树中的分类特征。与其他梯度提升算法(需要数字数据)不同,CatBoost自动处理分类特征。处理分类数据的最常用技术之一是单热编码,但它在许多特征下变得不可行。为了解决这个问题,特征按目标统计数据分组(估计每个类别的目标值)。目标统计数据可以用不同的方式计算:贪婪、坚持、留下一个和有序。 CatBoost 使用有序目标统计数据。

贪心方法取一个类别组的目标的平均值。但是它会受到目标泄漏的影响,因为目标值被用来计算分类变量的表示,然后使用这些特征进行预测( \hat{x}_k^i   使用目标计算y_k   )。 Holdout 方法试图通过对训练数据集进行分区来减少这种情况。但这显着降低了训练数据的有效利用。留一个排除目标样本但不是很有效。有序目标统计的灵感来自在线学习算法,该算法按时间顺序获取训练示例。它引入了人工时间,即随机排列\sigma   的训练示例。它将只依赖过去遇到的训练样本(样本在人工时间内出现在该特定样本之前),从而避免目标泄漏。

在数学上,D 的第 k 个元素的第 i 个分类变量的目标估计可以表示为,

\hat{x}_k^i = \frac {\sum_{x_j \epsilon D_k} 1_{x_k^i = x_k^j}.y_j \;+\; ap} {\sum_{x_j \epsilon D_k} 1_{x_k^i = x_k^j} \;+\; a}    ;\; if\; D_k = \{x_j: \;\sigma(j) < \sigma(i)\}   , 其中 a>0

指标函数1_{x_k^i = x_k^j} 当 CatBoost 的输入向量 x j的第 i分量等于输入向量 x k的第 i分量时,取值为 1。这里我们根据我们在 D 上的随机排列顺序使用 k 作为第 k 个元素\sigma ,并且 i 取整数值 1 到 k−1。参数 a 和 p (prior) 使方程免于下溢。 if 条件确保在对值进行编码时在 x i的值的计算中排除 y k的值x^i_k .该技术还确保使用每个示例的所有可用过去来计算其目标统计数据,从而对分类变量进行编码。

有序提升

梯度提升算法通常有过拟合的倾向。由于集成在同一数据集上的基础学习器上迭代构建,因此会影响模型的泛化能力。

当我们使用有序目标统计量对分类变量进行编码时,损失函数L 相对于函数F t-1的偏导数(梯度)也是一个随机变量,因为我们使用了随机排列\sigma(k) 选择 D k的元素来编码影响 F t-1值的分类变量。因此,梯度的分布可以在我们计算的条件下移动\frac{\delta \mathcal{L}y}{\delta F^{t-1}} 使用特定的编码x^i_k .这种条件转移导致我们对 h t的估计存在偏差,这会对我们在评估数据上的 F t-1时获得的指标产生负面影响,我们在训练时没有使用。这种对 F t-1的影响称为其泛化能力,该问题称为预测偏移

CatBoost 引入了有序提升来避免这个问题。在有序提升中,执行训练样例的随机排列并维护 n 个不同的支持模型(仅使用排列中的前i个样本训练的第 i模型),并且在每个步骤中通过使用先前的模型残差获得残差/误差。但这是不可行的,因为数据是有限的,并且维护不同模型的内存要求太高。

因此 CatBoost 出于实际目的使用了一个变体。在这个变体中,所有模型共享一个树结构(分裂特征序列)。即,CatBoost 使用与确定有序目标统计量相同的 D k作为确定结构或拟合决策树 h t的数据,并使用完整数据集 D 作为评估 h t是否为决策树的数据从而最小化预期损失。它使用多个排列\sigma_1...\sigma_n 计算可用于查找 h 的残差值集,以获得 F t-1 ,并保证不使用 的任何值来计算梯度值。从而减少梯度估计的方差(损失函数的变化率)并避免预测偏移。

CatBoost 优势

  • CatBoost 实现了遗忘决策树(二叉树,其中使用相同的特征对树的每一层进行左右拆分),从而将每层拆分的特征限制为一个,这有助于减少预测时间。
  • 它通过有序的目标统计数据有效地处理分类特征。
  • 它很容易与 R 和Python中的包一起使用。
  • 它可以有效地使用默认参数,从而减少参数调整所需的时间。

参考:

paper.nips.cc/paper/2018