RF、GBDT、XGBOOST常见面试算法整理
1、 RF(随机森林)与GBDT之间的区别
相同点:
1)都是由多棵树组成的
2)最终的结果都是由多棵树一起决定
不同点:
1) 组成随机森林的树可以是分类树也可以是回归树,而GBDT只由回归树组成
2) 组成随机森林的树可是并行生成,而GBDT只能是串行生成
3) 随机森林的结果是多棵树表决决定,而GBDT则是多棵树累加之和
4) 随机森林对异常值不敏感,而GBDT对异常值比较敏感
5) 随机森林是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能
6) 随机森林不需要进行数据预处理、归一化,而GBDT需要进行归一化
2、 分类树与回归树的区别
1) 分类树使用信息增益或者增益比来划分节点;每个节点的类别经投票数额决定测试样本的类别;
2) 回归树使用最小化均方差划分节点;每个节点样本的均值作为测试样本的回归预测值
3、 GBDT的核心
1) GBDT的核心就在于每一棵树都建立在之前所学的所有树的绝对值残差,这个残差就是一个加预测值后的真实值的累加量
4、 XGBOOST和GBDT的区别
1) 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
2) 节点分裂的方式不同,gbdt是用gini系数,xgboost是经过优化推导后的。
3) 传统的GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
4) xgboost在代价函数里加入了正则项,用于控制模型得复杂度,降低了过拟合的可能性。正则项里包含了树的叶子节点的个数、每个叶子节点上输出的score的L2模的平方和。
5) shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);
6) 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;
7) 对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动 学习出它的分裂方向;
8) xgboost工具支持并行。注意xgboost的并行并不是tree粒度的并行,xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复的使用这个结构,大大减小计算量。这个block结构也使得并行成为可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
9) xgboosst借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
10) 对缺失值处理。对于特征的值有缺失样本,xgboost可以自动学习出他的分裂方向。
1) 为什么xgboost要用泰勒展开,优势在哪里?
xgboost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准。使用泰勒展开取得函数做自变量得二阶导数形式,可以在不选定损失函数具体形式的情况下,仅仅依靠输入数据的值就可以进行叶子分裂优化计算,本质上也就把损失函数的选取和模型算法优化/参数选择分开了,这种去耦合增加了xgboost的适用性,使得它按需选取损失函数,可以用于分类,也可以用于回归
5、 GBDT怎样设置单颗树的停止生长条件?
1) 节点分裂时的最小样本数
2) 树的最大深度
3) 最多叶子节点数
4) Loss满足约束条件
6、 GBDT如何评估特征值的权重大小?
1) 通过计算每个特征在训练集下的信息增益,最后计算每个特征信息增益与所有特征信息增益之和的比例为权重值
2) 借鉴投票机制。用相同的GBDT参数对w每个特征训练出一个模型,然后在该模型下计算每个特征正确分类的个数,最后计算每个特征正确分类的个数与所有正确分类个数之和的比例为权重值
7、 GBDT当增加样本数量时,训练时长是线性增加吗?
不是的,因为生成单棵决策树时,对于损失函数极小值与样本数量N不是线性相关的
8、 当增加树的棵数时,训练时长是线性增加吗?
不是的,因为每棵树的生成时间复杂度O(N)不同
9、 当增加一棵树叶子节点数目时,训练时长是线性增加吗?
不是的,叶子节点数和每棵树的生成之间复杂度O(N)不成正比
10、每个节点上都保存什么信息?
中间节点保存某个特征的分割值,叶节点保存预测是某个类别的概率
11、如何防止过拟合
1)增加样本,移除噪声
2)减少特征,保留一些重要的特征
3)对样本进行采样,就是在构建树的时候,不是把所有的样本都作为输入,而是选择一部分数据作为子集
4)对特征进行采样化,和对样本采样基本一致,就是在每次建树的时候只对部分的特征进行切分
12、GBDT中哪些部分可以并行
1)计算每个样本的负梯度时
2)分裂挑选最佳特征及其分割点时,对特征计算相应的误差及均值时
3)更新每个样本的负梯度时
4)最后预测的过程当中,每个样本将之前的所有树的结果累加的时候
13、树生成畸形树,会带来哪些危害,如何预防?
在生成树的过程中,加入树不平衡的约束条件。这种约束条件可以是用户自定义的。例如对样本集中分到某个节点,而另一个节点的样本很少的情况进行惩罚。