ml课程:模型融合与调优及相关案例代码

版权声明:===========版权所有,可随意转载,欢迎互相交流=========== https://blog.csdn.net/weixin_42446330/article/details/84451453

以下是我的学习笔记,以及总结,如有错误之处请不吝赐教。

这篇文章主要介绍模型融合及参数调优相关内容,以及《百面机器学习》上关于模型评估、集成相关内容,最后还有相关案例代码。

先放一张大家都比较熟悉的图:

这是模型选择的一个流程图,可以作为相关的参考。

模型评估:

评估指标:在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。模型评估主要有以下几个指标:准确率(Accuracy),精确率(Precision),召回率(Recall),均方根误差(Root Mean Square Error,RMSE)。

面试问题1:准确率的局限性?

  • 准确率是指分类正确的样本占总样本个数的比例,即:

    其中ncorrect为被正确分类的样本个数,ntotal为总样本的个数。
  • 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
  • 事实上,这是一道比较开放的问题,面试者可以根据遇到的问题一步步地排查原因。标准答案其实也不限于指标的选择,即使评估指标选择对了,仍会存在模型过拟合或欠拟合、测试集和训练集划分不合理、线下评估与线上测试的样本分布存在差异等一系列问题,但评估指标的选择是最容易被发现,也是最可能影响评估结果的因素。

面试问题2:精确率与召回率的权衡?

  • 精确率(precison):是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例;召回率(recall):是指分类正确的正样本个数占真正的正样本个数的比例。
  • Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。
  • 为了综合评估一个排序模型的好坏,不仅要看模型在不同Top N下的Precision@N和Recall@N,而且最好绘制出模型的P-R(Precision-Recall)曲线。
  • P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。

    上面样例图,其中实线代表模型A的P-R曲线,虚线代表模型B的P-R曲线。当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1,这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估。
  • 除此之外,F1 score和ROC曲线也能综合地反映一个排序模型的性能。F1score是精准率和召回率的调和平均值,它定义为:

面试问题3:平方根误差的“意外”?

  • RMSE经常被用来衡量回归模型的好坏,但按照题目的叙述,RMSE这个指标却失效了。先看一下RMSE的计算公式为:

    其中,yi是第i个样本点的真实值,是第i个样本点的预测值,n是样本点的个数。
  • 一般情况下,RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。
  • 针对这个问题,有什么解决方案呢?可以从三个角度来思考。第一,如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。第二,如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这是一个宏大的话题,这里就不展开讨论了)。第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean AbsolutePercent Error,MAPE),它定义为:

    相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。

面试问题4:什么是ROC曲线?如何绘制ROC曲线?

  • ROC曲线是Receiver Operating Characteristic Curve的简称,中文名为“受试者工作特征曲线”。ROC曲线源于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来自于医学领域。
  • ROC曲线的横坐标为假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)。FPR和TPR的计算方法分别为:

    上式中,P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。
  • ROC曲线是通过不断移动分类器的“截断点”来生成曲线上的一组关键点的,通过下面的例子进一步来解释“截断点”的概念。在二值分类问题中,模型的输出一般都是预测样本为正例的概率。样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会被判为负例。比如,指定阈值为0.9,那么只有第一个样本会被预测为正例,其他全部都是负例。上面所说的“截断点”指的就是区分正负预测结果的阈值。通过动态地调整截断点,从最高的得分开始(实际上是从正无穷开始,对应着ROC曲线的零点),逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应的位置,再连接所有点就得到最终的ROC曲线。

面试问题5:如何计算AUC?

  • AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
  • 相比之前的P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。

  • 可以看出,P-R曲线发生了明显的变化,而ROC曲线形状基本不变。这个特点让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。所以,ROC曲线的适用场景更多,被广泛用于排序、推荐、广告等领域。但需要注意的是,选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。

面试问题6:结合你的学习和研究经历,探讨为什么在一些场景中要使用余弦相似度而不是欧氏距离?

  • 对于两个向量A和B,其余弦相似度定义为

    即两个向量夹角的余弦,关注的是向量之间的角度关系,并不关心它们的绝对大小,其取值范围是[−1,1]。当一对文本相似度的长度差距很大、但内容相近时,如果使用词频或词向量作为特征,它们在特征空间中的的欧氏距离通常很大;而如果使用余弦相似度的话,它们之间的夹角可能很小,因而相似度高。此外,在文本、图像、视频等领域,研究的对象的特征维度往往很高,余弦相似度在高维情况下依然保持“相同时为1,正交时为0,相反时为−1”的性质,而欧氏距离的数值则受维度的影响,范围不固定,并且含义也比较模糊。
  • 在一些场景,例如Word2Vec中,其向量的模长是经过归一化的,此时欧氏距离与余弦距离有着单调的关系,即

    其中|| A−B ||2表示欧氏距离,cos(A,B)表示余弦相似度,(1−cos(A,B))表示余弦距离。在此场景下,如果选择距离最小(相似度最大)的近邻,那么使用余弦相似度和欧氏距离的结果是相同的。
  • 总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

面试问题7:余弦距离是否是一个严格定义的距离?

  • 距离的定义:在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条距离公理(正定性,对称性,三角不等式)成立,则该实数可称为这对元素之间的距离。
  • 余弦距离满足正定性和对称性,但是不满足三角不等式,因此它并不是严格定义的距离。具体来说,对于向量A和B,三条距离公理的证明过程如下:
  • 正定性:根据余弦距离的定义有,

    ,考虑到,因此有恒成立。特别地,有

    因此余弦距离满足正定性。
  • 对称性:根据余弦距离的定义,有

    因此余弦距离满足对称性。
  • 三角不等式:该性质并不成立,下面给出一个反例。给定A=(1,0),B=(1,1),C=(0,1),则有

    ,因此有

    或者思考余弦距离和欧氏距离的关系:

    即有如下关系:

    显然在单位圆上,余弦距离和欧氏距离的范围都是[0,2]。我们已知欧氏距离是一个合法的距离,而余弦距离与欧氏距离有二次关系,自然不满足三角不等式。
  • 在机器学习领域,被俗称为距离,却不满足三条距离公理的不仅仅有余弦距离,还有KL距离(Kullback-Leibler Divergence),也叫作相对熵,它常用于计算两个分布之间的差异,但不满足对称性和三角不等式。

面试问题8:在对模型进行过充分的离线评估之后,为什么还要进行在线A/B测试?如何进行线上A/B测试?

  • 离线评估无法完全消除模型过拟合的影响,因此,得出的离线评估结果无法完全替代线上评估结果。
  • 离线评估无法完全还原线上的工程环境。一般来讲,离线评估往往不会考虑线上环境的延迟、数据丢失、标签数据缺失等情况。因此,离线评估的结果是理想工程环境下的结果。
  • 线上系统的某些商业指标在离线评估中无法计算。离线评估一般是针对模型本身进行评估,而与模型相关的其他指标,特别是商业指标,往往无法直接获得。比如,上线了新的推荐算法,离线评估往往关注的是ROC曲线、P-R曲线等的改进,而线上评估可以全面了解该推荐算法带来的用户点击率、留存时长、PV访问量等的变化。这些都要由A/B测试来进行全面的评估。
  • 进行A/B测试的主要手段:是进行用户分桶,即将用户分成实验组和对照组,对实验组的用户施以新模型,对对照组的用户施以旧模型。在分桶的过程中,要注意样本的独立性和采样方式的无偏性,确保同一个用户每次只能分到同一个桶中,在分桶过程中所选取的user_id需要是一个随机数,这样才能保证桶中的样本是无偏的。

面试问题9:如何划分实验组和对照组?

  • 将用户根据user_id个位数划分为试验组合对照组,分别施以模型A和B,才能够验证模型A的效果:

评估方法:主要有Holdout检验,自助法(Bootstrap),交叉验证(cross validation),常用的主要有K-fold交叉验证。

面试问题1:在模型评估过程中,有哪些主要的验证方法,它们的优缺点是什么?

  • Holdout 检验:是最简单也是最直接的验证方法,它将原始的样本集合随机划分成训练集和验证集两部分。Holdout 检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。
  • k-fold交叉验证:首先将全部样本划分成k个大小相等的样本子集;依次遍历这k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型的训练和评估;最后把k次评估指标的平均值作为最终的评估指标。在实际实验中,k经常取10。
  • 留一验证:每次留下1个样本作为验证集,其余所有样本作为测试集。样本总数为n,依次对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标。在样本总数较多的情况下,留一验证法的时间开销极大。事实上,留一验证是留p验证的特例。留p验证是每次留下p个样本作为验证集,而从n个元素中选择p个元素有种可能,因此它的时间开销更是远远高于留一验证,故而很少在实际工程中被应用。
  • 自助法:不管是Holdout检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。自助法是基于自助采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。

面试问题2:在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时,最终有多少数据从未被选择过?

  • 一个样本在一次抽样过程中未被抽中的概率为,n次抽样均未抽中的概率为,当n趋于无穷大时,概率为:

    因此,当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集。

超参数选择:

面试问题1:超参数有哪些调优方法?

  • 主要有网格搜索、随机搜索、贝叶斯优化等算法。
  • 超参数搜索算法一般包括三个要素:一是目标函数,即算法需要最大化/最小化的目标;二是搜索范围,一般通过上限和下限来确定;三是算法的其他参数,如搜索步长。
  • 网格搜索:可能是最简单、应用最广泛的超参数搜索算法,它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优值。然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。因此,在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。

  • 随机搜索:的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。
  • 贝叶斯优化算法:在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息;而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。具体来说,它学习目标函数形状的方法是,首先根据先验分布,假设一个搜集函数;然后,每一次使用新的采样点来测试目标函数时,利用这个信息来更新目标函数的先验分布;最后,算法测试由后验分布给出的全局最值最可能出现的位置的点。对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。

模型优化:

一、过拟合、欠拟合

面试问题1:在模型评估过程中,过拟合和欠拟合具体是指什么现象?

  • 过拟合:是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。
  • 欠拟合:指的是模型在训练和预测时表现都不好的情况。

面试问题2:能否说出几种降低过拟合和欠拟合风险的方法?

  • 降低“过拟合”风险的方法:1)从数据入手,获得更多的训练数据。使用更多的训练数据是解决过拟合问题最有效的手段,因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。当然,直接增加实验数据一般是很困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、缩放等方式扩充数据;更进一步地,可以使用生成式对抗网络来合成大量的新训练数据;2)降低模型复杂度。在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等;3)正则化方法。给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中。以L2正则化为例:

    这样,在优化原来的目标函数C0的同时,也能避免权值过大带来的过拟合风险。(4)集成学习方法。集成学习是把多个模型集成在一起,来降低单一模型的过拟合风险,如Bagging方法(参考文章:bagging和boosting相关介绍)。
  • 降低“欠拟合”风险的方法:(1)添加新特征。当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征,往往能够取得更好的效果。在深度学习潮流中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、Deep-crossing等都可以成为丰富特征的方法;(2)增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等;(3)减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数。

二、线性模型的权重分析

  • 过线性或者线性kernel的model,可以直接调取权重值查看。
  • 对权重绝对值高/低的特征:a)做更细化的工作;b)特征组合(参考文章:特征组合相关介绍

三、Bad-case分析

  • 分类问题:训练样本是否分错了、哪部分特征使得做这个判断、bad-case有没有共性、是否还有没挖掘的特性
  • 回归问题:哪些样本预测结果差距大。。。

四、模型融合/集成(model ensemble)

Ensemble Learnig 是一组individual learner的组合:

  • 如果individual learner同质,称为base learner;
  • 如果individual learner异质,称为component learner。

面试问题1:集成学习分哪几种?他们有何异同?

  • Boosting主要思想:迭代式学习,训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。Boosting的过程很类似于人类学习的过程,我们学习新知识的过程往往是迭代式的,第一遍学习的时候,我们会记住一部分知识,但往往也会犯一些错误,对于这些错误,我们的印象会很深。第二遍学习的时候,就会针对犯过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的次数减少到很低的程度。
  • Bagging主要思想:集体投票决策,与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。其中很著名的算法之一是基于决策树基分类器的随机森林(Random Forest)。为了让基分类器之间互相独立,将训练集分为若干子集(当训练样本数量较少时,子集之间可能有交叠)。Bagging方法更像是一个集体决策的过程,每个个体都进行单独学习,学习的内容可以相同,也可以不同,也可以部分重叠。但由于个体之间存在差异性,最终做出的判断不会完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式做出最后的集体决策。
  • 从消除基分类器的偏差和方差的角度来理解Boosting和Bagging方法的差异。基分类器,有时又被称为弱分类器,因为基分类器的错误率要大于集成分类器。基分类器的错误,是偏差和方差两种错误之和。偏差主要是由于分类器的表达能力有限导致的系统性错误,表现在训练误差不收敛。方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。
  • Boosting方法是通过逐步聚焦于基分类器分错的样本,减小集成分类器的偏差。Bagging方法则是采取分而治之的策略,通过对训练样本多次采样,并分别训练出多个不同模型,然后做综合,来减小集成分类器的方差

下图是Bagging算法的示意图,Model 1、Model 2、Model 3都是用训练集的一个子集训练出来的,单独来看,它们的决策边界都很曲折,有过拟合的倾向。集成之后的模型(红线所示)的决策边界就比各个独立的模型平滑了,这是由于集成的加权投票方法,减小了方差。

面试问题2:集成学习有哪些基本步骤?请举几个集成学习的例子

  • 成学习一般可分为以下3个步骤。(1)找到误差互相独立的基分类器;(2)训练基分类器;(3)合并基分类器的结果。
  • 并基分类器的方法有voting和stacking两种。前者是用投票的方式,将获得最多选票的结果作为最终的结果。后者是用串行的方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加(或者用更复杂的算法融合,比如把各基分类器的输出作为特征,使用逻辑回归作为融合模型进行最后的结果预测)作为最终的输出。
  • 以Adaboost为例,其基分类器的训练和合并的基本步骤如下。(1)确定基分类器:这里可以选取ID3决策树作为基分类器。事实上,任何分类模型都可以作为基分类器,但树形模型由于结构简单且较易产生随机性所以比较常用。(2)训练基分类器:假设训练集为{xi,yi},i=1,...,N,其中yi{−1,1},并且有T个基分类器,则可以按照如下过程来训练基分类器。

    将它归一化为一个概率分布函数。(3)合并基分类器:给定一个未知样本z,输出分类结果为加权投票的结果

    Adaboost的例子中我们可以明显地看到Boosting的思想,对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变。在最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合。错误率低的分类器拥有更大的“话语权”。
  • 另一个非常流行的模型是梯度提升决策树,其核心思想是,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。这里使用残差继续学习,就是GBDT中Gradient Boosted所表达的意思。

面试问题3:常用的基分类器是什么?

  • 常用的基分类器是决策树,主要有以下3个方面的原因。(1)决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。(2)决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。(3)数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。

面试问题4:可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么?

  • 随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样Bagging才能有用武之地。线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器使用Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样,而导致他们在训练中更难收敛,从而增大了集成分类器的偏差。

面试问题5:什么是偏差和方差?

  • 偏差:指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。偏差通常是由于我们对学习算法做了错误的假设所导致的,比如真实模型是某个二次函数,但我们假设模型是一次函数。由偏差带来的误差通常在训练误差上就能体现出来。
  • 方差:指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。方差通常是由于模型的复杂度相对于训练样本数m过高导致的,比如一共有100个训练样本,而我们假设模型是阶数不大于200的多项式函数。由方差带来的误差通常体现在测试误差相对于训练误差的增量上,具体参考下图:

面试问题6:如何从减小方差和偏差的角度解释Boosting和Bagging的原理?

  • Bagging能够提高弱分类器性能的原因是降低了方差,Boosting能够提升弱分类器性能的原因是降低了偏差。
  • Bagging 是 Bootstrap Aggregating 的简称,意思就是再抽样,然后在每个样本上训练出来的模型取平均。假设有n个随机变量,方差记为σ2,两两变量之间的相关性为ρ,则n个随机变的均值\frac{\sum X_{i}}{n}的方差为,随机变量完全独立的情况下,n个随机变量的方差为σ2/n,也就是说方差减小到了原来的1/n;当然,模型之间不可能完全独立。为了追求模型的独立性,诸多Bagging的方法做了不同的改进。比如在随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有属性中选取最优属性,这就是为了避免弱分类器之间过强的相关性。通过训练集的重采样也能够带来弱分类器之间的一定独立性,从而降低Bagging后模型的方差。
  • Boosting是在训练好一个弱分类器后,我们需要计算弱分类器的错误或者残差,作为下一个分类器的输入。这个过程本身就是在不断减小损失函数,来使模型不断逼近“靶心”,使得模型偏差不断降低。但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使得各弱分类器之间是强相关的,缺乏独立性,所以并不会对降低方差有作用。
  • 关于泛化误差、偏差、方差和模型复杂度的关系如下图所示。不难看出,方差和偏差是相辅相成,矛盾又统一的,二者并不能完全独立的存在。对于给定的学习任务和训练数据集,我们需要对模型的复杂度做合理的假设。如果模型复杂度过低,虽然方差很小,但是偏差会很高;如果模型复杂度过高,虽然偏差降低了,但是方差会很高。所以需要综合考虑偏差和方差选择合适复杂度的模型进行训练。

面试问题7:GBDT的基本原理是什么?

  • Gradient Boosting是Boosting中的一大类算法,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。算法1描述了Gradient Boosting算法的基本流程,在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新。Gradient Boosting算法的伪代码如下图所示:

  • 采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT,有时又被称为MART(Multiple Additive Regression Tree)。GBDT中使用的决策树通常为CART。由于GBDT是利用残差训练的,在预测的过程中,我们也需要把所有树的预测值加起来,得到最终的预测结果。

面试问题8:度提升和梯度下降的区别和联系是什么?

下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。

面试问题9:GBDT的优点和局限性有哪些?

  • 优点:(1)预测阶段的计算速度快,树与树之间可并行化计算。(2)在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。(3)采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
  • 局限性:(1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。(2)GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。(3)训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

面试问题10:XGBoost与GBDT的联系和区别有哪些?

  • XGBoost是陈天奇大佬开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进;
  • 原始的GBDT算法基于经验损失函数的负梯度来构造新的决策树,只是在决策树构建完成后再进行剪枝。而XGBoost在决策树构建阶段就加入了正则项,即:

    其中Ft−1(xi)表示现有的t−1棵树最优解。关于树结构的正则项定义为:

    其中T为叶子节点个数,wj表示第j个叶子节点的预测值。对该损失函数在Ft−1处进行二阶泰勒展开可以推导出:

    其中T为决策树ft中叶子节点的个数,,Ij表示所有属于叶子节点j的样本的索引的结合。设决策树的结构已知,通过令损失函数相对于wj的导数为0,可以求出在最小化损失函数的情况下各个叶子节点上的预测值:

  • 然而从所有的树结构中寻找最优的树结构是一个NP-hard问题,因此在实际中往往采用贪心法来构建出一个次优的树结构,基本思想是从根节点开始,每次对一个叶子节点进行分裂,针对每一种可能的分裂,根据特定的准则选取最优的分裂。不同的决策树算法采用不同的准则,如IC3算法采用信息增益,C4.5算法为了克服信息增益中容易偏向取值较多的特征而采用信息增益比,CART算法使用基尼指数和平方误差,XGBoost也有特定的准则来选取最优分裂。通过将预测值代入到损失函数中可求得损失函数的最小值:

    容易计算出分裂前后损失函数的差值为:

    XGBoost采用最大化这个差值作为准则来进行决策树的构建,通过遍历所有特征的所有取值,寻找使得损失函数前后相差最大时对应的分裂方式。此外,由于损失函数前后存在差值一定为正的限制,此时γ起到了一定的预剪枝效果。
  • GBDT与XGBoost在工程实现上做了大量的优化,两者之间的区别和联系为:1)GBDT是机器学习算法,XGBoost是该算法的工程实现;2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力;(3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数;(4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器;(5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样;(6)传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。(参考文章:ml课程:决策树、随机森林、GBDT、XGBoost相关(含代码实现)

案例代码:欢迎关注我的github


To be continue......

猜你喜欢

转载自blog.csdn.net/weixin_42446330/article/details/84451453