《《机器学习基础及应用》教案第10课构建集成学习模型.docx》由会员分享,可在线阅读,更多相关《《机器学习基础及应用》教案第10课构建集成学习模型.docx(10页珍藏版)》请在课桌文档上搜索。
1、课题构建集成学习模型课时2课时(90min)教学目标知识技能目标:(1)掌握集成学习的基本原理、结合策略与类型(2)掌握Bagging算法的基本原理及其Skleam实现方法(3)掌握随机森林算法的基本原理及其Skleam实现方法(4)掌握Boosting算法的基本原理及其Skleam实现方法(5)能够使用随机森林算法训练模型(6)能够编写程序,寻找随机森林模型参数的最优值素质目标:掌握集成学习新思路,提升使用科学方法解决实际问题的能力了解科技前沿新技术,拓展社会实践能力教学重难点教学重点:集成学习的基本原理、结合策略与类型;Bagging算法的基本原理及其Sklearn实现方法;随机森林算法的
2、基本原理及其Sklearn实现方法;Bsting算法的基本原理及其Skleam实现方法教学难点:使用随机森林算法训练模型;编写程序,寻找随机森林模型参数的最优值教学方法案例分析法、问答法、讨论法、讲授法教学用具电脑、投影仪、多媒体课件、教材教学过程主要教学内容及步骤课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过APP或其他学习软件,完成课前任务,提前了解集成学习模型的相关知识【学生】完成课前任务考勤【教师】使用APP进行签到【学生】班干部报请假人员及原因问题导入【教师】提出以下问题:什么是集成学习?【甦】思考、传授新知【教师】通过学生的回答引入要讲的知识,介绍集成学习、B
3、agging与随机森林算法、Boosting算法等知识8.1 集成学习8.1.1 集成学习的基本原理1 .集成学习的原理分析*【教师】通过多媒体展示“集成学习的一般结构”图片(详见教材),并进行讲解集成学习(ensemblelearning)也称多分类器系统或基于委员会的学习,它是将多个基础学习器(也称个体学习器)通过结合策略进行结合,形成一个性能优良的集成学习器来完成学习任务的一种方法,如图所示.在集成学习中,个体学习器一般由一个现有的学习算法(如C4.5决策树算法)从训练数据中训练得到。在训练集成学习模型时,如果所有个体学习器都是同类模型(如集成学习模型中每个个体学习器都是决策树模型),则
4、由这些同类个体学习器相结合产生的集成学习模型称为同质集成模型,同质集成模型中的个体学习器亦称“基学习器,相应的学习算法称为基学习算法”;如果个体学习器不是同类模型(如集成学习模型中同时包含决策树分类模型和k近邻分类模型),则由这些不同类别的个体学习器相结合产生的集成学习模型称为异质集成模型,异质集成模型中的个体学习器常称为“组件学习器”。2.个体学习器对集成学习模型性能的影响集成学习是通过一定的结合策略将多个个体学习器进行结合得到的模型。模型的性能会受到个体学习器的预测准确率、多样性和数量等因素的影响。(1)个体学习器的预测准确率与多样性对集成学习模型性能的影响。【教师】通过多媒体展示“集成学
5、习模型性能提升”集成学习模型性能降低“和”集成学习模型性能不变”表格,并介绍相关知识例如,在二分类任务中,如果3个不同的个体学习器在3个测试样本中的预测准确率都是66.6%,则集成学习模型的预测准确率可能能够达到100%,即集成学习模型的性能有所提升,如表8-2所示(。率(一般个体学习器的预测准确率应大于60%),并且各个个体学习器之间要有差异(多样性)(2)个体学习器的数量对集成学习模型性能的影响。例如,在二分类任务中,假设个体学习器的预测误差率相互独立,则集成学习模型的预测误差率为 exp -T(1-其中,T表示个体学习器的数量,0表示个体学习器的预测误差率。【知识库】集成学习模型的预测误
6、差率公式是通过Hoeffding不等式计算得到的,Hoeffding不等蝙常用于组合数学与计算机科学,其不等式右侧的符号exp在高等数学中表示以自然常数e为底的指数函数,即8叫V可见,随着集成学习模型中个体学习器数目T的增大,集成学习模型的预测误差率将呈指数级下降,最终趋向于零。然而,这个结论是基于假设个体学习器的误差相互独立”得到的。在现实任务中,个体学习器是为解决同一问题而训练出来的,显然它们不可能相互独立。事实上,个体学习器的“准确性和多样性本身就存在冲突,一般准确性较高之后,要增加多样性就必须牺牲准确性.所以说,如何训练出好而不同”的个体学习器,是集成学习研究的核心内容。8.1.2集成
7、学习的结合策略常见的集成学习结合策略有3种,分别为平均法、投票法和学习法。1.平均法当模型的预测结果是数值型数据时,最常用的结合策略是平均法,即模型的预测结果是每个个体学习器预测结果的平均值,平均法包含简单平均法和力哝平均法两种。假设集成学习模型中包含T个个体学习器用,其中,个体学习器h对样本X的预测值表示为(外,则简单平均法的计算公式为1 IH(X)=不ZMX)lT力哝平均法的计算公式为=Z岫(X)r=lfWf=l其中,Wi表示个体学习器几的权重,通常要求叫且.加权平均法的权重一般是从训练集中学习得到的。现实任务中的训练样本通常不充分或存在噪声,这使得模型从训练集中学习得到的权重并不完全可靠
8、,尤其对规模较大的孀集来说,要学习的权重太多,模型容易产生过拟合现象.因此,加权平均法不一定优于简单平均法。一般而言,在个体学习器性能差异较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。2.投票法在分类任务中,通常使用投票法。具体流程为每个个体学习器从类别标签集合忙G,GJ中预测出一个标签,然后通过投票决定最终的模型预测结果。投票法分为绝对多娥票法、相对多数投票法和加权投票法3种。(1)绝对多数投票法:某标签票数超过半数,则模型预测为该标签,否则拒绝预测。这在可靠性要求较高的学习任务中是一个很好的机制。(2)相对多数投票法:预测值为票数最多的标签,如果同时有多个标签获得最高票
9、数,则从中随机选取一个.(3)加权投票法:与加权平均法类似,在投票时需要考虑个体学习器的权重。3.学习法当训练集很大时,一种更为强大的结合策略是学习法。学习法是指通过一个学习器将各个个体学习器进行结合的一种策略,通常把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。【高手点拨】学习法的典型代表是SIaCking,SIaCking先从初始数据集中训练出初级学习器,然后生成T新数据集用于训练次级学习器。在这个新数据集中,各个初级学习器的输出值是特征变量,而初始样本的标签仍然是新数据集中对应样本的标签。对于一个待测样本,初级学习器可预测出该样本的所属类别,然后将各个初级学习器的输
10、出值(预测完成的类别标签)作为次级学习器的输入值传入次级学习器,次级学习器即可输出集成学习模型的最终预测结果。8.1.3集成学习的类型根据个体学习器的生成方式不同,集成学习可分为两大类,一类为并行化集成学习,即个体学习器之间不存在强依赖关系,可同时生成的集成学习模式,其代表算法是Bagging和随机森林;另一类为串行化集成学习,即个体学习器之间存在强依赖关系,必须串行生成的集成学习模式,其代表算法是Bsting【教师】讲解“素养之窗”的内容(详见教材),了解我国智能产业的发展8.2Bagging与随机森林算法8.2.1 Bagging算法1 .Bagging算法的基本原理【教师】通过多媒体展示
11、“Bagging分类算法原理”图片(详见教材),并进行讲解Bagging算法是并行式集成学习方法中最著名的代表,其基本原理是,给定一个训练样本数据集,基于这个数据集采用自助采样法(bootstrapsampling)生成T个子数据集,然后使用每个子数据集训练一个个体学习器,再将这些个体学习器进行结合得到Bagging模型。Bagging算法在进行结合时,通常对分类任务使用简单投票法,对回归任务使用简单平均法。【高手点拨】自助采样法的采样过程如下。(1)给定一个包含m个样本的数据集,先随机取出一个样本放入采样集中,再将该样本放回初始数据集中,使得下次采样时该样本仍有可能被选中。(2)随机抽取第2
12、个样本放入采样集中,然后再将该样本放回初始数据集中。(3)经过m次随机采样操作,就可以得到一个包含m个样本的子数据集。(4)重复以上步骤,即可得到第2个子数据集、第3个子数据集,直到第T个子数据集。2 .Bagging算法的Sklearn实现Sklearn的ensemble模块提供了BaggingClassifier类和BaggingRegressor类,分别用于实现Bagging分类和回归算法。在Skleam中,可通过下面语句导入Bagging算法模块。fromskleam.ensembleimportBaggingClassifier#导入Bagging分类模块fromSkleam.ens
13、embleimportBaggingRegressor#导入Bagging回归模块BaggingClassifier类和BaggingRegressor类都有如下几个参数。(1)参数base_estimator用于指定个体学习器的基础算法。(2)参数n_estimators用于设置要集成的个体学习器的数量。(3)在Skleam中,Bagging算法允许用户设置训练个体学习器的样本数量和特征数量,分别使用参数nax-samples和参数maxfeaturcs进彳5(4)参数random.state用于设置随机数生成器的种子,能够随机抽取样本和特征。【例81】使用Bagging算法(用k近邻算法训
14、练个体学习器)与k近邻算法对Skleam自带的莺尾花数据集进行分类,并比较两个模型的预测准确率。【程序分析】使用Bagging算法与k近邻算法对莺尾花数据集进行分类并比较两个模型的预测准确率的步骤如下.(1)导入Sklearn自带的莺尾花数据集,然后彳镯娓集拆分为训练集与测试集,并寻找k近邻模型的最优k值。【参考代码】fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportBaggingClassifierfromsklearn.n
15、eighborsimportKNeighborsClassifierfromsklearn.metricsimportaccuracy.scorefromsklearn.model_seleciionimportcross_va!_scoreimportmatplotlib.pyplotaspit#拆分数据集x,y=load_iris().data.load_iris().targetx_train.x_tes(,y_(rain,y_tes(=train_test_split(x,y,random_state=0,test_size=0.5)#k取不同值的情况下,计算模型的预测误差率k.ran
16、ge=range(l,15)#设置k值的取值范围k-error=#k_error用于保存预测误差率数据forkink-range:model=KNeighborsClassifier(n-neighbors=k)scores=cross_val_score(model.x,y,cv=5,scoring=accuracy)#5折交叉验证k_error.append(l-scores.mean()#画图,X轴表示k的取值,y轴表示预测误差率plt.rcParams(,fbnt.sans-serifI-Simheipli.plot(k_range,k_error,r-)plt.xlabel(k的取值
17、,)PkylabeI(预测误差率)plt.show()【运行结果】程序运行结果如图8-3所示。可见,当k的值为6、7、10、11或12时,模型的预测误差率最低.0.0552468101214k的取值(2)当k=6时,分别训练k近邻模型和基于k近邻算法的Bagging模型。【参考代码】#定义模型kNNmodel=KNeighborsClassifier(6)#k近型BaggingmodeI=BaggingClaSSifier(KNeighborSCIaSSifier(6),n-estimators=130,max_samples=0.4,max_features=4,random_state=1
18、)#Bagging模型制练模型kNNmodel.fit(x_train,y_train)BaggingmodeI.fit(x_train,y_train)kNN_pre=kNNmolel.predici(x_test)kNN_ac=accuracy_score(y_test,kNN_pre)PrinIek近邻模型预测准确率:,kNN_ac)BaggingePre=BaggingmodeLpredict(Xjest)Bagging_ac=accuracy_score(y_tesi,Bagging_pre)Print(基于k近邻算法的Bagging模型的预测准确率:.Bagging,ac)【运行结
19、果】程序运行结果如图所示。可见,基于k近邻算法的Bagging模型对k近邻模型进行了加强,预测准确率高于k近邻模型。k近邻模型项测准确率:0.9333333333333333基于k近邻算法的Bagging模型的瓶测准确率:0.94666666666666678.2.2随机森林算法1 .随机森林算法的基本原理随机森林(randomforest.RF)算法是Bagging算法的一个扩展变体,其基学习器指定为决策树,但在训练过程中加入随机属性选择,即在构建单棵决策树的过程中,随机森林算法并不会利用子数据集中所有的特征属性训练决策树模型,而是在树的每个节点处从m个特征属性中随机挑选k个特征属性(ktn
20、),一般按照节点基尼指数最小的原则从这k个特征属性中选出一个,对节点进行分裂,让这棵树充分生长,不进行通常的剪枝操作。【高手点拨】在随机森林算法生成单棵决策树的过程中,参数k控制了特征属性的选取数量,若A,则随机森林中单棵决策树的构建与传统的决策树算法相同。一般情况下,推荐k的取值为lg?随机森林模型往往具有很高的预测准确率,对异常值和噪声具有很好的容忍度,且不容易出现过拟合现象。在实际应用中,随机森林算法的优点有:构建单棵决策树时,选择部分样本及部分特征,能在一定程度上避免出现过拟合现象;构建单棵决策树时,随机选择样本及特征,使得模型具有很好的抗噪能力,性能稳定;能处理很高维度的数据,并且不
21、需要进行特征选择和降维处理。随机森林算法的缺点在于参数较复杂,模型训练和预测速度较慢。2 .随机森林算法的Sklearn实现Sklearn的ensemble模块提供了RandomForestClassifier类和RandomForestRegressor类,分别用于实现随机森林分类和回归算法。在SkIeam中,可通过下面语句导入随机森林算法模块。fromskleam.ensembleimportRandomForestClassifier#导入随机森林分类模块fromskleam.ensembleimportRandomForesiRegressor#导入随机余林回归模块RandomFore
22、siCIassifier类和RandomForestRegressor类都有如下几个参数。(1)参数n_estimam用于设置要集成的决策树的数量。(2)参数criterion用于设置特征性的评价标准,RandomForestsCIassifier中参数criterion的取值有gini和entronpy,gini表示基尼指数,entronpy表示信息增益,默认值为gini;RandomForestsRegressor中criterion的取值有mse和mae,mse表示均方差,mae表示平均绝对误差,默认值为mse(3)参数maxjeatures用于设置允许单棵决策树使用特征的最大值。(4)
23、参数random.SlaIe表示随机种子,用于控制随机模式,当random_state取某一个值时,即可确定一种规则.【例8-2使用随机森林算法对Sklearn自带的杳尾花数据集进行分类。【程序分析】使用随机森林算法对莺尾花数据集进行分类的步骤如下。(1)使用随机森林算法训练模型,并输出模型的预测准确率。【参考代码】fromsklearn.datasetsimportIoadJrisfromsklearn.model-selectionimporttrain_test_splitfromsklearn.ensembleimportRandomForestClassifierfromsklear
24、n.metricsimportaccuracy_scoreimportma(plotlib.pyplotaspitfromma(plotlib.colorsimportLisiedColomiapimportnumpyasnp# 拆分数据集x,y=loadjris().data(:,2:4|.load_iris().targetx_(rain,x_test,y_train,y_test=lrain_test_split(x,y,random_state=0,test_size=50)相Il练模型model=RandomForestClassifier(n-estimators=10,rando
25、m_state=0)model.fit(x_train,y_train)坪F估模型pred=model.predic(xjesi)ac=accuracy_score(y_test,pred)Prim(随机森林模型的预测准确率:,ac)【运行结果】程序运行结果如图所示.随机森林模型的预测准确率:0.94(2)使用Matplotlib绘制图形,显示模型的分类效果。【参考代码】X1.x2=np.meshgrid(np.linspace(O.8,5OO),np.linspace(O,3,5OO)x_new=np.stack(x1.flat,x2.flat),axis=1)y_predict=model
26、.predict(x_new)y_hat=y_predict.reshape(x1.shape)iris_cmap=ListedColormap(#ACC6C0;,#FF8080,#A0A0FFM)pll.pcolormesh(x1.x2,y_hat,cmap=iris_cmap)# 绘制3种类别莺尾花的样本点plt.scatter(xy=0.0,xy=0,l,s=30,c=g.marker=A)plt.scatter(x(y=l,OJ,xy=1,1,s=30,c=,r,marker=,o)ll.scatter(xy=2,0,xy=2.1,s=30.c-bmarker=s)# 设置坐标轴的名称
27、并显示图形plt.rcParamsfont.sans-serif,-Simheiplt.xlabel(花瓣长度)pll.ylabelC花瓣宽度,)plt.show()【运行结果】程序运行结果如图所示。可见,随机森林模型可有效地对样本数据进行分类。1.0-0.5-0.0lllllll012345678花楙长度8.3Boosting算法8.3.1 Boosting算法的基本原理Boosting是一族可将弱学习器提升为强学习器的算法,是串行式集成学习方法中最著名的代表。Boosting家族中各个算法的工作原理类似,即先从初始训练集中训练出一个个体学习器,并对这个个体学习器预测错误的样本进行关注,然后
28、调整训练样本的分布,基于调整后的样本训练下一个个体学习器,如此重复直到个体学习器的数量达到事先指定的值T,再将这T个个体学习器进行力哝结合,得到最终模型。Boosting家族中比较有代表性的算法是AdaBoost.AdaBoost算法从训练样本出发,通过不断调整训练样本的权重或概率分布来训练模型,其基本流程如下。(1乂锄始训练集D中每个样本的权重都设置为一个相同的值N(N为初始训练集的样本数量),使用初始训练集训练一个个体学习器。(2)使用训练完成的个体学习器对训练数据进行预测,然后增加预测错误的样本的权重,减少预测正确的样本的权重,获得带权重的训练集。(3)使用上一步迭代完成的训练集重新训练
29、模型,得到下一个个体学习器。(4)重复步骤(2)和步骤(3),直到个体学习器的数量达到事先指定的值T,然后将这T个个体学习器进行加权结合,得到最终模型。【高手点拨】在AdaBoost算法中,训练样本的权重会被逐个修改。随着迭代次数的增加,难以预测正确的样本对模型的影响越来越大,弱学习器更加关注这些样本,其预测准确率就会逐渐提升,最终将弱学习器提升为强学习器。8.3.2Adaboost算法的Sklearn实现Sklearn的ensemble模块提供了AdaBOoStCklSSifier类和AdaBwstRegressor类,分别用于实现AdBboost分类和回归算法。在Sklearn中,可通过下
30、面语句导入AdaBoost算法模块。fromskleam.ensembleimportAdaBoostCIassifier#导入AdaBoost分类模块fromskleam.ensembleimportAdaBoostRegressor#导入AdaBoost回归模块AdaBoostClassifier类和AdaBoostRegressor类都有如下几个参数。(1)参数base_estimator用于指定个体学习器的基础算法,常用的算法是CART决策树或神经网络(神经网络算法将在后面项目中介绍)。(2)参数UStimatorS用于设置要集成的个体学习器的数量,其默认值为50F来说nestimat
31、ors值设置得较小,模型容易出现欠拟合现象,n_estimatog值设置得较大,模型容易出现过拟合现象。在实际调参过程中,该参数经常与参数Ieaming_rate一起调节。(3)参数IeamingJale为弱学习器的权重缩减系数,其取值范围为O-Ie对于同样的训练集拟合效果,较小的Iearning_rate值意味着需要更多数量的弱学习器。【例8-3使用AdaBoost算法对Skleam自带的莺尾花数据集进行分类。【程序分析】AdaBoost算法的参数n_estimators往往要与参数leaming-rate一起调节,可使用网格搜索法寻找参数的最优值,然后输出最优参数值与对应模型的预测准确率。
32、【参考代码】fromsklearn.datasetsimportload-irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.ireeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy.scorefromsklearn.model_selectionimportGridSearchCVfromsklearn.model_selectionimportStrat
33、ifiedShuffleSplit#拆分数据集x,y=load_iris().data.load_iris().targetx_train.x_tes(,y_(rain,y_tes(=train_test_split(x,y,random_state=0,test_size=50)param-grid=(n.estimators,ll0,20,30,40.50,60,70,80.90,100Jeamingjate:0.0001.0.0005,0.001.0,005,0.01,0.05,0.1,0.5,0.6,0/7,0.8,0.9cv=StratifiedShuffleSplit(n_spli
34、ts=5,test_size=0.3,random_state=420)#对样本进行分层抽样grid=GridSearchCV(AdaBoostClassifier(DecisionTreeClassifier(criterion=gini.max_depth=3),random_state=O),param_grid=param_grid,cv=cv)grid.fit(x_train,y_train)model=grid.best_estimator_#获取最型pred=model.predict(x-test)ac=accuracy_score(y_test,pred)PrinH最优参数值
35、为:%s%grid.best_params_)Prim(最优参数值对应模型的预测准确率为:%f-%ac)【运行结果】程序运行结果如图8-7所示.可见,网格搜索法找到的最优参数值为(leaming_rate:0.005;n_estimators:40),这组参数值对应的模型给出了较高的预测准确率。最优参数值为:Flearningjate:0.005,n-estimators,:40)最优参数值对应模型的颈测处确率为:0.960000【学生】聆听、思考、理解、记录课堂实践【教师】介绍“泰坦尼克号”乘客能否获救预测”项目的大概流程,安排学生扫描微课二维码依次观看视频”数据准备数据预处理调节参数”训练
36、与评估模型”和”预测新数据”(详见教材),并进彳五并解和演示按照项目要求,使用集成学习中的随机森林算法训练泰坦尼克号乘客能否获救的模型的步骤分解如下.第I步:数据准备。使用PandaS读取泰坦尼克号”乘客信息数据集,然后输出该数据集并显示数据集信息。第2步:数据预处理。由于数据集中存在唯一特征属性和缺失值太多的特征属性,因此,在训练模型之前需要先对数据集进行预处理,具体处理过程如下。(1)删除唯Te征属性name和ticket。(2)删除缺失值太多的特征属性room”.(3)将特征属性age中的缺失值补充完整(以本列数据的平均值来补充缺失值)。(4)特征性embarked缺少18个值,直接将这
37、18条(行)数据删除。(5)答恃征性pclasssex和embarked转换为数值型瘫。第3步:调节参数。提取数据集的特征变量与标签,然后将数据集划分为训练集与测试集,寻找随机森林模型中n_estimators参数的最优值,并使用MatpIotIib绘制参数!.estimators与模型预测准确率的关系图。第4步:训练与评估模型。使用最优参数值训练模型,并输出模型的评估报告。第5步:预测新数据。使用训练好的模型预测新数据,并输出新数据的预测结果。使用集成学习中的随机森林算法训练泰坦尼克号”乘客能否获救的模型,需要先理解集成学习的基本原理。本项目将对相关知识进行介绍,包括集成学习的基本原理,集成学习的结合策略,集成学习的类型,Bagging与随机森林算法,以及BOOSting算法。1.数据准备步骤1导入Pandas库。步骤2读取泰坦尼克号”乘客信息数据,并进行输出。步骤3显示该数据集的信息(详见教材)【学生】参照教师的演示进行操作,如遇问题可询问老师【教师】巡堂辅导,及时解决学生遇到的问题课堂小结【教师】简要总结本节课的要点集成学习Bagging与随机森林算法Bsting算法泰坦尼克号”乘客能否获救预测【学生】总结回顾知识点作业布置【教师】布置课后作业请根据课堂知识,完成本章项目实训和项目考核中与本次课程有关的题目。【学生】完成课后任务教学反思
链接地址:https://www.desk33.com/p-1242715.html