《机器学习-Python实战(微课版)》课件 第九章 AdaBoost_第1页
《机器学习-Python实战(微课版)》课件 第九章 AdaBoost_第2页
《机器学习-Python实战(微课版)》课件 第九章 AdaBoost_第3页
《机器学习-Python实战(微课版)》课件 第九章 AdaBoost_第4页
《机器学习-Python实战(微课版)》课件 第九章 AdaBoost_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章AdaBoost

学习目标通过本章学习可以:掌握Boosting算法的思想掌握AdaBoost算法的基本原理掌握AdaBoost的scikit-learn应用方法BoostingAdaBoost原理AdaBoost的scikit-learn实现应用案例集成学习通过将多个单个学习器集成/组合在一起,使它们共同完成学习任务,以达到提高预测准确率的目的。Bagging:核心思想是对训练集进行有放回地抽取,从而为每一个基本分类器都构造出一个同样大小但各不相同的的训练集,从而训练出不同的基分类器。代表算法是随机森林。Boosting:是一种可以用来减小监督学习中偏差的机器学习算法。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提升分类的性能。代表算法有Adaboost和GradientBoostingTree(GBDT)。回顾:集成学习Boosting的主要作用跟bagging类似也是一种把若干个基分类器整合为一个分类器的方法。Boosting是一个顺序过程,每个后续模型都会尝试纠正先前模型的错误,后续的模型依赖于之前的模型。Boosting的基本思想先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合。Boosting的工作机制样本权重分类器权重优化学习器修正样本权重Boosting是一个迭代的过程,通过改变训练样本的分布,使得基分类器聚焦在那些很难分的样本上。不像bagging,Boosting给每一个训练样本赋予一个权值,而且可以在每一轮提升过程结束时自动地调整权值。Boosting结合了很多弱学习器来形成一个强学习器,单个模型表现不佳,但它们在数据集的某些部分表现很好。因此,每个模型实际上提升了集成的整体性能。训练样本的权值可以用于以下方面:可以用作抽样分布,从原始数据集中提取出自主样本集。基学习器可以使用权值学习有利于高权值样本的模型。Boosting提升的理解偏差-方差Boosting:降低偏差。Bagging:降低方差。样本选择:Boosting:每一轮的训练集不变,只是训练集中每个样本的权重发生变化,权值根据上一轮的预测结果进行调整。Bagging:训练集是在原始集中有放回抽取的,从原始集中选出的训练集之间是独立的。样本权重:Boosting:根据错误率不断调整样本的权值,错误率越大则权值越大。Bagging:每个样本的权重相等。Bagging与Boosting区别(1)基学习器权重:Boosting:每个弱学习器都有相应的权重,对于误差小的学习器会有更大的权重。Bagging:弱学习器的权重可以相等也可以赋予权重。串、并行计算:Boosting:串行,各个及学习器顺序生成,因为后一个模型参数依赖于前一轮模型的预测结果。Bagging:各个学习器可以并行生成。Bagging与Boosting区别(2)BoostingAdaBoost原理AdaBoost的scikit-learn实现应用案例Boosting族算法最著名的代表是AdaBoost[FreundandSchapire,1997]。AdaBoost:AdaptiveBoosting,自适应提升。Adaboost采用迭代的思想,继承了Boosting算法,每次迭代只训练一个弱学习器,训练好的弱学习器将参与下一次迭代。也就是说,在第N次迭代中,一共有N个弱学习器,其中N-1个是以前训练好的,其各种参数都不会改变,本次训练第N个学习器。其中弱学习器的关系是第N个弱学习器更可能分对前N-1个弱学习器没分对的数据,最终分类输出要看这N个分类器的综合效果。AdaBoost1.如何改变训练样本分布?2.采用什么样的结合策略来将基学习器结合成一个强学习器?针对第一个问题,AdaBoost提高那些被前一轮基学习器错误分类的样本的权值,降低那些被正确分类的样本的权值;针对第二个问题,AdaBoost对所有基学习器采用加权结合,增大分类误差小的基学习器的权值,减少分类错误率大的基学习器的权值。AdaBoost的两个关键问题

二分类算法原理(1)

二分类算法原理(2)

二分类算法原理(3)

直接将Adaboost算法应用于多类分类问题往往不能得到令人满意的结果。针对这个问题,ZhuJi等人在2009年提出了SAMME及SAMME.R算法,这也是sklearn中用Adaboost做多类分类问题时采用的算法。两者的主要区别是弱学习器权重的度量。SAMME是二分类Adaboost算法的扩展,即用对样本集分类效果作为弱学习器权重,而SAMME.R使用了对样本集分类的预测概率大小来作为弱学习器权重。由于SAMME.R使用了概率度量的连续值,迭代一般比SAMME快,因此AdaBoostClassifier的默认算法algorithm的值也是SAMME.R。多分类问题

SAMME算法原理

SAMME.R算法原理SAMME.R使用概率估计来更新增加模型,而SAMME只使用分类。SAMME.R算法通常比SAMME更快地收敛,通过更少的提升迭代实现较低的测试误差。每一次提升迭代后,测试集上各算法的误差显示左侧图,每一棵树的测试集上的分类误差显示在中间,每一棵树的boost权重显示为右侧图。在SAMME.R算法中,所有树的权重都是1,因此没有显示。SAMME和SAMME.R对比

回归算法原理(1)

回归算法原理(2)

回归算法原理(3)

回归算法原理(4)

优点:Adaboost是一种有很高精度的分类器可以使用各种方法构建弱学习器分类器弱学习器构造比较简单不用做特征筛选泛化能力好,不用担心overfitting(过拟合)缺点:容易受到噪声干扰训练时间长执行效果依赖于弱学习器的选择AdaBoost优缺点BoostingAdaBoost原理AdaBoost的scikit-learn实现应用案例类库介绍:AdaBoostClassifier用于分类,AdaBoostRegressor用于回归。AdaBoostClassifier使用了两种Adaboost分类算法的实现,SAMME和SAMME.R。而AdaBoostRegressor则使用了Adaboost.R2(和前面原理一致)。Adaboost调参:主要从两方面进行调参,一是对Adaboost的框架进行调参,二是对选择的弱分类器进行调参,两者相辅相成。AdaBoost的scikit-learn实现(1)base_estimator:弱分类学习器或者弱回归学习器。AdaBoostClassifier默认使用CART分类树DecisionTreeClassifier,而AdaBoostRegressor默认使用CART回归树DecisionTreeRegressor。(2)algorithm:这个参数只有AdaBoostClassifier有。scikit-learn实现了两种Adaboost分类算法,SAMME和SAMME.R。两者的主要区别是弱学习器权重的度量。AdaBoostClassifier的默认算法是SAMME.R。(3)loss:这个参数只有AdaBoostRegressor有,Adaboost.R2算法会用到。有线性‘linear’,平方‘square’和指数‘exponential’三种选择,默认是线性。框架参数(1)(4)n_estimators:AdaBoostClassifier和AdaBoostRegressor都有,弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是50。(5)learning_rate:AdaBoostClassifier和AdaBoostRegressor都有,即每个弱学习器的权重缩减系数ν,ν的取值范围为0<ν≤1,默认是1。对于同样的训练集拟合效果,较小的ν意味着需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。框架参数(2)(1)max_features:划分时考虑的最大特征数。可以使用很多种类型的值,默认是“None”,意味着划分时考虑所有的特征数。(2)max_depth:决策树最大深度。默认可以不输入,此时,决策树在建立子树的时候不会限制子树的深度。(3)min_samples_split:内部节点划分所需最小样本数。默认是2。这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。弱学习器参数(1)(4)min_samples_leaf:叶子节点最少样本数,默认是1。这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。(5)min_weight_fraction_leaf:叶子节点最小的样本权重和,默认是0,即不考虑权重问题。这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。(6)max_leaf_nodes:最大叶子节点数,默认是“None”,即不限制最大的叶子节点数。通过限制最大叶子节点数,可以防止过拟合。弱学习器参数(2)BoostingAdaBoost原理AdaBoost的scikit-learn实现应用案例本小节基于Boston波士顿房价数据集利用AdaBoost对房价进行预测。Boston房价预测是一个回归问题。数据集一共包含506个观察,13个输入变量和1个输出变量。每条数据包含房屋以及房屋周围的详细信息。其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等。应用案例导入库准备数据集数据准备fromsklearn.datasetsimportload_bostonfromsklearn.ensembleimportAdaBoostRegressor#下载数据集boston=load_boston()#定义feature和labelx=boston.datay=boston.targetprint('Featurecolumnname')print(boston.feature_names)print("Sampledatavolume:%d,numberoffeatures:%d"%x.shape)print("Targetsampledatavolume:%d"%y.shape[0])sns.distplot(tuple(y),kde=False,fit=st.norm)定义模型AdaBoost和DecisionTree,在未调参的情况下对比两者的性能。模型定义和训练#定义模型名称names=['DecisionTree','AdaBoost']#定义模型models=[DecisionTreeRegressor(),AdaBoostRegressor(n_estimators=30)]#模型训练并返回R2值defR2(model,x_train,x_test,y_train,y_test):model_fitted=model.fit(x_train,y_train)y_pred=model_fitted.predict(x_test)score=r2_score(y_test,y_pred)returnscore#输出模型测试结果forname,modelinzip(names,models):score=R2(model,x_train,x_test,y_train,y_test)print("{}:{:.6f}".format(name,score.mean()))返回结果:DecisionTree:0.461254AdaBoost:0.657742通过网格搜索的方法选择较好的框架参数。网格搜索#网格搜索选择较好的框架参数parameters={'n_estimators':[50,60,70,80],'learning_rate':[0.5,0.6,0.7,0.8,0.9],}model=GridSearchCV(AdaBoostRegressor(),param_grid=parameters,cv=3)model.fit(x_train,y_train)#输出最合适的参数值print("Optimalparameterlist:",model.best_params_)print("Optimalmodel:",model.best_estimator_)print("OptimalR2value:",model.best_score_)返回结果:Optimalparameterlist:{'lea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论