Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

CatBoost

CatBoost 是 Yandex 的开源梯度提升库,它使用有序目标统计对类别特征进行编码,并构建对称树。

CatBoost 是用于决策树的开源梯度提升库,由 Yandex 开发并于 2017 年发布。它的名称来自“类别提升”(categorical boosting):它可以直接接受城市、产品 ID 或设备类型等类别列的原始字符串,并在内部将其转换为数字,因此表格数据训练前无需手动进行独热编码或目标编码。其 NeurIPS 2018 论文提出的两项方法——有序目标统计和有序提升——会避免在用于拟合每个训练行的数值中使用该行自身的标签,从而防止普通目标编码和标准提升中的信息泄漏及偏差。CatBoost 支持在 CPU和 GPU上训练,提供 Python、R 和命令行接口,并支持分类、回归和排序。

CatBoost 如何编码类别特征#

独热编码会为每个类别创建一列;对于商家 ID 或用户 ID 这类有数千种取值的特征,这种做法会变得难以管理。目标编码会用某个类别对应行的标签均值替换该类别,虽然表示紧凑,却会泄露答案:某行自己的标签也参与了描述该行的数值计算,因此模型学会了一种在新数据上失效的捷径。这是一种数据泄漏,会导致过拟合,而且在稀有类别上尤为严重。

CatBoost 的有序目标统计通过对训练行随机排列来解决这个问题。每行的类别编码只使用排列中位于该行之前的行的标签,并向先验值平滑,因此任何一行都不会看到自己的标签。CatBoost 会对多个排列重复这一过程,对取值很少的特征使用独热编码,并在训练过程中贪心地构造类别特征组合(例如城市与设备类型的交叉组合)作为新特征。

在 CatBoost Python 软件包中,类别列通过 cat_features 按名称传入。下面的示例为 50 种订阅方案分别设置隐藏的流失率,并检查模型能否从原始方案名称中推断出这些比率:

import numpy as np
import pandas as pd
from catboost import CatBoostClassifier

# Synthetic churn data: each of 50 plans has its own hidden churn rate
rng = np.random.default_rng(0)
rates = rng.uniform(0.05, 0.6, size=50)
plan_ids = rng.integers(0, 50, size=5000)
X = pd.DataFrame({"plan": [f"plan_{i}" for i in plan_ids], "tenure_months": rng.integers(1, 60, size=5000)})
y = rng.random(5000) < rates[plan_ids]

# Raw strings go in directly; CatBoost encodes them with ordered target statistics
model = CatBoostClassifier(iterations=200, depth=4, verbose=0, random_seed=0)
model.fit(X, y, cat_features=["plan"])

# Compare true and predicted churn for the safest and riskiest plans
lo, hi = rates.argmin(), rates.argmax()
probe = pd.DataFrame({"plan": [f"plan_{lo}", f"plan_{hi}"], "tenure_months": [30, 30]})
print("True churn rates:     ", rates[[lo, hi]].round(2))
print("Predicted churn rates:", model.predict_proba(probe)[:, 1].round(2))

脚本输出的真实比率为 0.05 和 0.60,预测比率为 0.06 和 0.59。模型从原始字符串列中推断出了每种方案的流失率,而每种方案的训练行数只有约 100 条。

有序提升与对称树#

标准梯度提升会在与早期树相同的训练行上计算新树的目标值,即损失梯度,这会使梯度产生偏差;CatBoost 作者将这种现象称为预测偏移。有序提升会再次运用排列技巧:每行的梯度来自只在排列中更早行上训练的模型。这是一项训练选项 boosting_type="Ordered",通常能提升小型数据集上的效果,但会降低速度。CPU 默认使用经典的 "Plain" 方案;对于不超过 50,000 行的数据集,GPU 训练默认使用 "Ordered",多分类模式除外。

CatBoost 默认构建对称树(也称为 oblivious tree),其中同一深度的所有节点都使用相同的分裂条件。因此,深度为 6(默认值)的树只需进行六次是或否判断,其结果构成一个 6 位索引,对应 64 个叶节点。这种结构可加快预测、限制每棵树的复杂度,属于一种正则化形式。数据集需要限制更少的树时,可以通过 grow_policy 参数切换为按深度或按叶节点生长。

实际应用#

  • 信用风险:贷款机构会结合职业、地区和贷款用途等申请人类别字段,以及收入和债务等数值,预测违约情况,无需对数百种职业代码进行独热编码。
  • 排序与推荐:CatBoost 提供 YetiRank 等排序损失函数,可在推荐系统中根据用户、商品和上下文特征预测相关性,从而为搜索结果或商品排序。
  • 房产估值:定制训练的 YOLO26检测器可以从房源照片中统计泳池或太阳能板等设施,这些计数会作为数值列输入 CatBoost 价格模型,与社区和房产类型等类别列一起使用。

CatBoost 与 XGBoost 和 LightGBM#

这三个库都会依次构建由多棵树组成的集成模型,每棵树都修正前面树的误差;这一点使它们不同于随机森林,后者的树是独立训练的。

  • XGBoost:默认逐层生长树,并在目标函数中加入 L1 和 L2 正则化。较新版本才加入原生类别特征支持,但许多流水线在训练前仍会对类别进行编码。
  • LightGBM:逐叶生长树,每次拆分能最大幅度降低损失的叶节点,并将特征分箱为直方图,因此在大型数据集上速度很快。它也能原生接受整数编码的类别列。
  • CatBoost:构建对称树,使用有序目标统计编码类别,并且无需任何超参数调优即可取得不错的结果。默认设置为 1,000 棵深度为 6 的树;对于对数损失、多分类和 RMSE 目标,学习率会根据迭代次数自动选择。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来