当前位置: 首页 > news >正文

20240322-2-Catboost面试题

Catboost面试题

在这里插入图片描述

1. 简单介绍Catboost?

CatBoost是一种以对称决策树 为基学习器的GBDT框架,主要为例合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。CatBoost还解决了梯度偏差以及预测偏移的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

2. 相比于XGBoost、LightGBM,CatBoost的创新点有哪些?

  • 自动将类别型特征处理为数值型特征。
  • Catboost对类别特征进行组合,极大的丰富了特征维度。
  • 采用排序提升的方法对抗训练集中的噪声点,从而避免梯度估计的偏差,进而解决预测偏移的问题。
  • 采用了完全对称树作为基模型。

3. Catboost是如何处理类别特征的?

  • 基数比较低的类别型特征

    利用One-hot编码方法将特征转为数值型

  • 基数比较高的类别型特征

    • 首先会计算一些数据的statistics。计算某个category出现的频率,加上超参数,生成新的numerical features。这一策略要求同一标签数据不能排列在一起(即先全是之后全是这种方式),训练之前需要打乱数据集。
    • 第二,使用数据的不同排列(实际上是个)。在每一轮建立树之前,先扔一轮骰子,决定使用哪个排列来生成树。
    • 第三,考虑使用categorical features的不同组合。例如颜色和种类组合起来,可以构成类似于blue dog这样的特征。当需要组合的categorical features变多时,CatBoost只考虑一部分combinations。在选择第一个节点时,只考虑选择一个特征,例如A。在生成第二个节点时,考虑A和任意一个categorical feature的组合,选择其中最好的。就这样使用贪心算法生成combinations。
    • 第四,除非向gender这种维数很小的情况,不建议自己生成One-hot编码向量,最好交给算法来处理。

4. Catboost如何避免梯度偏差

经典梯度提升算法每个步骤中使用的梯度由当前模型中的相同的数据点(节点)来估计,这导致估计梯度在特征空间的任何域中的分布与该域中梯度的真实分布相比发生了偏移,从而导致过拟合。

对于每一个样本单独训练一个模型,使用模型估计样本的梯度,并用估计的结果对模型进行评分

5. Catboost如何避免预测偏移?

预测偏移是由梯度偏差造成的。在GDBT的每一步迭代中, 损失函数使用相同的数据集求得当前模型的梯度, 然后训练得到基学习器, 但这会导致梯度估计偏差, 进而导致模型产生过拟合的问题。CatBoost通过采用排序提升 的方式替换传统算法中梯度估计方法,进而减轻梯度估计的偏差。

6. 解释一下排序提升

在传统的GBDT框架当中,构建下一棵树分为两个阶段:选择树结构和在树结构固定后计算叶子节点的值。CatBoost主要在第一阶段进行优化。在建树的阶段,CatBoost有两种提升模式,Ordered和Plain。Plain模式是采用内建的ordered TS对类别型特征进行转化后的标准GBDT算法。Ordered则是对Ordered boosting算法的优化。

7. Catboost为什么要使用对称树?

  • 对称树是平衡的,不容易过拟合

  • 统一层使用相同的分割准则

  • 每个叶子节点的索引可以被编码为长度等于树深度的二进制向量

    首先将所有浮点特征、统计信息和独热编码特征进行二值化,然后使用二进制特征来计算模型预测值

8. CatBoost的优缺点

优点:

  • 性能卓越: 在性能方面可以匹敌任何先进的机器学习算法;
  • 鲁棒性/强健性: 它减少了对很多超参数调优的需求,并降低了过度拟合的机会,这也使得模型变得更加具有通用性;
  • 实用: 可以处理类别型、数值型特征;
  • 可扩展: 支持自定义损失函数;

缺点:

  • 对于类别型特征的处理需要大量的内存和时间;
  • 不同随机数的设定对于模型预测结果有一定的影响;
http://www.lryc.cn/news/329154.html

相关文章:

  • 【PSINS工具箱】EKF与UKF滤波
  • UOS部署oceanbase
  • Hive查询转换与Hadoop生态系统引擎与优势
  • WPF上使用MaterialDesign框架---下载与配置
  • 鸿蒙ARKTS--简易的购物网站
  • LabVIEW转动设备故障诊断系统
  • uniapp h5 touch事件踩坑记录
  • webpack.prod.js(webpack生产环境配置文件)
  • 利用python做模拟数据(测试数据),连接数据库和服务器接口,涉及雪花id服务
  • 大模型日报2024-03-30
  • 【ARM 嵌入式 C 入门及渐进 14 -- C 代码中取余与取模的使用介绍】
  • C++入门知识详细讲解
  • pytorch中的torch.hub.load():以vggish为例
  • mysql 用户管理-权限管理
  • RabbitMQ--04--发布订阅模式 (fanout)-案例
  • 基于java+SpringBoot+Vue的网上书城管理系统设计与实现
  • PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
  • 通过WSL在阿里云上部署Vue项目
  • 240330-大模型资源-使用教程-部署方式-部分笔记
  • uni-app 富文本编辑器
  • 3D汽车模型线上三维互动展示提供视觉盛宴
  • 如何在Flutter中进行网络请求?
  • node:ReferenceError: XMLHttpRequest is not defined
  • PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
  • 图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力
  • 动态规划-----背包类问题(0-1背包与完全背包)详解
  • 通过 Docker 搭建 BookStack
  • 通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
  • [k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)
  • java中的static和单例模式