文章目录
1. 集成学习的结合策略有哪些?
- (1)平均法: 用于数值类的回归预测问题
算术平均: H ( x ) = 1 T ∑ 1 T h i ( x ) H(x) = \frac {1} {T} \sum\limits_{1}^{T}h_i(x) H(x)=T11∑Thi(x)
如果每个个体学习器有一个权重 w w w,则最终预测是: H ( x ) = ∑ i = 1 T w i h i ( x ) H(x) = \sum\limits_{i=1}^{T}w_ih_i(x) H(x)=i=1∑Twihi(x) - (2)投票法: 用于分类问题的预测问题
相对多数投票法:类别数量最多的
绝对多数投票法:类别数量最多的且票数过半
加权投票法:分类票数要乘以一个权重,各个类别的加权票数求和的最大值 - (3)学习法: stacking
将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
2. Bagging 和 Boosting 两者之间的区别?
- (1)训练样本集:
Bagging:训练集是在原始集中有放回抽样的,从原始集中抽取的K组训练集是相互独立的。
Boosting:每一轮迭代的训练集是不变的,只是训练集中每个样本在分类器中的权重是发生变化的。 - (2)训练样本权重:
Bagging:使用均匀取样,每个训练样本的权重相等。
Boosting:根据学习器的错误率不断调整样例的权值,错误率越大权值越大。 - (3)预测函数的权重:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。 - (4)并行计算:
Bagging:K组学习器模型可以并行生成。
Bagging:K组学习器只能顺序生成,因为后一个模型的样本权值需要前一个学习器模型的结果。 - (5)偏差和方差:
Bagging:整体模型的偏差相似于基模型的偏差,高偏差低方差。
Bagging:模型不断迭代进行无法并行,误差越来越小,低偏差高方差。
3. Boosting 集成算法中Adaboost、GBDT与XGBoost的区别?
(1)Adaboost和GBDT的区别
- AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。
- GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。通俗来说,AdaBoost通过调整错分的数据点的权重来改进模型,而GBDT是反复地选择一个指向负梯度方向的函数去拟合改进模型。
(2)GBDT与XGBoost的区别
XGBoost则可以自定义损失函数,借助泰勒展开(只需知道损失函数的一阶、二阶导数即可求出损失函数)转换为一元二次函数,得到极值点与对应极值即为所求。
- GBDT是机器学习算法, XGBoost是该算法的工程实现。
基分类器的选择:
GBDT使用CART作为基分类器,XGBoost支持多种类型的基分类器, 比如线性分类器。二阶泰勒展开:
GBDT在模型训练时只使用了代价函数的一阶导数信息, XGBoost对代价函数进行二阶泰勒展开, 可以同时使用一阶和二阶导数。XGBoost工具支持自定义损失函数,只要函数可一阶和二阶求导。方差-方差权衡:
XGBoost在目标函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出分数的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。样本数据抽样:
传统的GBDT在每轮迭代时使用全部的数据, XGBoost借鉴了随机森林的做法,支持对数据进行采样,不仅能降低过拟合还能减少计算,这也是XGBoost异于传统GBDT的一个特性。缺失值处理:
传统的GBDT没有设计对缺失值进行处理, XGBoost能够自动学习出缺失值的处理策略。
4. RF和GBDT的区别?
- GBDT:
GBDT算法中最典型的基学习器是CART回归决策树,GBDT中的决策树是个弱模型,深度较小一般不会超过5,叶子节点的数量也不会超过10,对于生成的每棵决策树乘上比较小的缩减系数(学习率<0.1),有些GBDT的实现加入了随机抽样(subsample 0.5<=f <=0.8)提高模型的泛化能力, 通过交叉验证的方法选择最优的参数。 - RF:
RF的核心就是自采样(样本随机)和属性随机(所有样本特征中随机选择K个特征选择最优属性来划分),样本数相同下的不同训练集产生的各个分类器,即数据的扰动导致模型学习性能的变化。
相同点:
(1)都是由多棵树组成;
(2)最终的结果都是由多棵树一起决定;
不同点:
(1)RF采用的bagging思想,而GBDT采用的boosting思想;
(2)RF的基学习器可以是分类树或回归树,而GBDT只能由回归树组成;
(3)RF每个基分类器的训练集不相同但权重相同;GBDT每个基分类器训练集相同但权重不同;
(4)组成RF的树可以并行生成;而GBDT只能是串行生成;
(5)对于最终的输出结果,RF采用多数投票等;而GBDT是将所有结果累加起来或者加权累加起来;
(6)RF对异常值不敏感;GBDT对异常值非常敏感;
(7)RF是通过减少模型方差(variance)提高性能;GBDT是通过减少模型偏差(bias)提高性能。
(bias和variance是解释模型泛化性能的,其实还有噪声)
5. GBDT 算法相关问题
(1)gbdt 的算法的流程?
gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。弱分类器一般会选择为CART分类回归树。最终的总分类器是将每轮训练得到的弱分类器加权求和得到的(也就是加法模型)。
- gbdt 通过经验风险极小化来确定下一个弱分类器的参数。具体到损失函数本身的选择,有平方损失函数,0-1损失函数,对数损失函数等。如果我们选择平方损失函数,那么这个差值就是平常所说的残差。
- gbdt 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。
- gbdt 每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。
(2)gbdt 如何选择特征 ?
gbdt选择特征的细节其实是想问你CART Tree生成的过程。
CART TREE 生成的过程其实就是一个选择特征的过程。假设我们目前总共有 M 个特征。第一步我们需要从中选择出一个特征 j,做为二叉树的第一个节点。然后对特征 j 的值选择一个切分点 m. 一个 样本的特征j的值 如果小于m,则分为一类,如果大于m,则分为另外一类。如此便构建了CART 树的一个节点。其他节点的生成过程和这个是一样的。遍历每个特征,然后对每个特征遍历它所有可能的切分点,找到最优特征 m 的最优切分点 j。
(3)gbdt 如何构建特征 ?
gbdt 本身是不能产生特征的,但可以利用gbdt去产生特征的组合。
例如,使用 GBDT 生成了两棵树,两颗树一共有五个叶子节点。我们将样本 X 输入到两颗树当中去,样本X 落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是我们便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为 0。于是对于该样本,可以得到一个向量[0,1,0,1,0] 作为该样本的组合特征,和原来的特征一起输入到逻辑回归当中进行训练。
(4)gbdt的参数有哪些,如何调参 ?
- n_estimators: 最大迭代次数=最大的弱学习器的个数,默认是100
- learning_rate: 每个弱学习器的权重缩减系数ν,也称作步长,默认是1,加上了正则化项强学习器的迭代公式为 f k ( x ) = f k − 1 ( x ) + ν h k ( x ) f_{k}(x) = f_{k-1}(x) + \nu h_k(x) fk(x)=fk−1(x)+νhk(x), v v v的取值范围为 0 < ν ≤ 1 0 < \nu \leq 1 0<ν≤1。
- max_features: 最大特征数,默认是"None",即考虑所有的特征数;一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了。
- max_depth: 决策树最大深度,默认值是3,如果数据少或者特征少的时可以不管这个值。如果模型样本量多,特征也多的情况下,具体的取值取决于数据的分布。常用的可以取值10-100之间。
(5)gbdt的优缺点?
GBDT主要的优点有:
- 可以灵活处理各种类型的数据,包括连续值和离散值。
- 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
- 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
- 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
6. AdaBoost算法
AdaBoost
AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写。它的自适应在于:前一个基本分类器分错的样本在后一个基分类器权重会增加,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
Adaboost 迭代算法就3步:
初始化训练数据的权值分布。
如果有N个样本,则每一个训练样本初始都被赋予相同的权值:1/N。训练弱分类器。
具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。将各个训练得到的弱分类器组合成强分类器。
误差率低的弱分类器在最终分类器中占的权重较大,使其在最终的分类函数中起着较大的决定作用;否则较小,使其在最终的分类函数中起着较小的决定作用。
在二分类学习中,可以认为Adaboost模型就是加法模型、损失函数为指数函数(损失函数为指数函数这一定理是由推导而来的)、学习算法为前向分布算法;在回归学习中,可以认为Adaboost模型就是加法模型、损失函数为平方损失函数、学习算法为前向分布算法。
7. XGboost、RF、LR的优缺点?
-
(1)XGboost
优点:- 寻找最佳分割点时,传统的枚举每个特征的所有可能分割点的贪心法效率太低,xgboost实现了一种近似的算法,根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
- 特征列排序后以块的形式存储在内存中,在迭代中可以重复使用;
-
(2)RF
- 优点:
1) 训练可以高度并行化,对于大数据时代的大样本训练速度有优势。
2) 可随机选择决策树节点划分特征,在样本特征维度很高的时,仍然能高效的训练模型。
3) 在训练后,可以给出各个特征对于输出的重要性。
4) 由于采用了随机采样,训练出的模型的方差小,泛化能力强。
5) 相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
6) 对部分特征缺失不敏感。
7) 对于不平衡数据集来说,随机森林可以平衡误差。
8) RF抗过拟合能力比较强。
9)RF能够解决分类与回归两种类型的问题 - 缺点:
1)在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
2)取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。
3)当进行回归时,RF并不能给出一个连续的输出,不能够做出超越训练集数据范围的预测,某些特定噪声的数据进行建模时出现过度拟合。
4) 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。
- 优点:
-
(3)LR
- 优点:
1)实现简单,广泛的应用于工业问题上;
2)分类时计算量非常小,速度很快,存储资源低;
3)便利的观测样本概率分数;
4)对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题。 - 缺点:
1)当特征空间很大时,逻辑回归的性能不是很好;
2)容易欠拟合,一般准确度不太高;
3)不能很好地处理大量多类特征或变量,只能处理两分类问题,且必须线性可分;对于非线性特征,需要进行转换。
- 优点: