【数据挖掘】 GBDT面试题:其中基分类器CART回归树,节点的分裂标准是什么?与RF的区别?与XGB的区别?

简介: 文章讨论了梯度提升决策树(GBDT)中的基分类器CART回归树的节点分裂标准,并比较了GBDT与随机森林(RF)和XGBoost(XGB)的区别,包括集成学习方式、偏差-方差权衡、样本使用、并行性、最终结果融合、数据敏感性以及泛化能力等方面的不同。

1、简单介绍GBDT

GBDT(Gradient Boosting Decision Tree)梯度提升决策树,理解为梯度提升+决策树。利用最速下降的近似方法,利用损失函数的负梯度拟合基学习器。利用损失函数的负梯度,替代提升树算法中的残差,去拟合一个回归树。回归和分类基学习器都是CART回归树,区别在于分类问题使用softmax进行映射。其中CART回归树是以损失函数作为评价指标,又引入了剪枝过程的生成树算法。

GBDT如何构建特征:将样本输入到GBDT中,按照所有CART树的叶结点进行编码,得到该样本的组合特征。

2、其中基分类器CART回归树,节点的分裂标准是什么?

  • 原始决策树节点分裂准则:节点内特征数量阈值,小于阈值,停止分裂
  • 基于ID3算法的决策树节点分裂准则:信息增益,越大越好
  • 基于C4.5算法的决策树节点分裂标准:信息增益比,越大越好
  • 基于CART算法的决策树节点分裂标准:回归树,采用平方根误差最小化准则,分类树,采用基尼指数。越小越好

3、RF和GBDT的区别

相同点:

  • 都是由多棵树组成,最终的结果都是由多棵树一起决定。

不同点:

  • 集成学习:RF属于bagging思想,而GBDT是boosting思想
  • 偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
  • 并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
  • 最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
  • 数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
  • 泛化能力:RF不易过拟合,而GBDT容易过拟合

(4)决策树如何进行剪枝

分为预剪枝和后剪枝。

预剪枝的思想是在树中结点进行扩展之前,先计算当前的划分是否带来模型泛化能力的提升,如果不能,则不再继续生长子树。预剪枝对何时停止决策树的生长有几种方法

  • 当树达到一定深度时,停止树的生长
  • 当达到当前结点的样本数量小于某个阈值的时候,停止树的生长
  • 计算每次分裂时对测试机的准确率提升,当小于某个阈值的时候,不再继续扩展

后剪枝的思想是让算法生成一颗完全生长的决策树,然背后从最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子结点替代。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销更大。常见的后剪枝方法有

  • 代价复杂度剪枝(CCP)
  • 错误率降低剪枝(REP)
  • 悲观剪枝(PEP)
  • 最小误差剪枝(MEP)
  • CVP(Critical Value Pruning)
  • OPP(Optimal Pruning)
目录
相关文章
|
2月前
|
Java
【Java集合类面试二十八】、说一说TreeSet和HashSet的区别
HashSet基于哈希表实现,无序且可以有一个null元素;TreeSet基于红黑树实现,支持排序,不允许null元素。
|
2月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
2月前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
1月前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
181 93
|
18天前
|
编译器
经典面试题:变量的声明和定义有什么区别
在编程领域,变量的“声明”与“定义”是经典面试题之一。声明告诉编译器一个变量的存在,但不分配内存,通常包含变量类型和名称;而定义则为变量分配内存空间,一个变量必须至少被定义一次。简而言之,声明是告知变量形式,定义则是实际创建变量并准备使用。
|
18天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
53 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
9天前
|
前端开发 小程序 JavaScript
面试官:px、em、rem、vw、rpx 之间有什么区别?
面试官:px、em、rem、vw、rpx 之间有什么区别?
12 0
|
1月前
|
Java 关系型数据库 MySQL
面试官:GROUP BY和DISTINCT有什么区别?
面试官:GROUP BY和DISTINCT有什么区别?
56 0
面试官:GROUP BY和DISTINCT有什么区别?
|
2月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
2月前
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。