集成学习原理朴素贝叶斯

集成学习(ensemblelearning),它本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。

如何产生并结合“好而不同”的个体学习器,是集成学习研究的核心。

也就是说,集成学习有两个主要的问题需要解决,

下面,我们从两个部分来理解集成学习:个体学习器的生成、学习器结合策略。

首先,生成的基学习器要满足两个条件:

在集成学习中,根据个体学习器的生成方式不同,可以分为Bagging算法和Boosting算法。

Boosting算法通过顺序地给训练集中的数据重新加权创造不同的基础学习器。

其核心思想是,

具体来说,

Boosting算法的最终模型是一系列基础学习器的线性组合,并且系数依赖于各个基础学习器的表现。

Boosting算法有很多版本,目前使用最广泛的是AdaBoost算法(AdaptiveBoosting自适应性提升法)和GBDT算法(梯度提升决策树GradientBoostingDecisionTree)。

#AdaBoostingfromsklearn.ensembleimportAdaBoostClassifierclf=AdaBoostClassifier(n_estimators=100)scores=cross_val_score(clf,iris.data,iris.target,cv=5)scores.mean()Bagging算法Bagging算法原理如下图,

#使用baggingfromsklearn.ensembleimportBaggingClassifier#回归用BaggingRegressorfromsklearn.treeimportDecisionTreeClassifierbagging_clf=BaggingClassifier(DecisionTreeClassifier(),n_estimators=500#基评估器数量,max_samples=100#每个子模型使用的样本数,bootstrap=True#放回取样#,oob_score=True#使用袋外数据做测试集,调用bagging_clf.oob_score_得到分数,n_jobs=-1#使用所有核进行训练,max_features=2#针对特征随机采样,bootstrap_features=True#特征放回取样)bagging_clf.fit(X_train,y_train)bagging_clf.score(X_test,y_test)随机森林是bagging的一个特化进阶版,

其基本思想没有脱离bagging的范畴。

Bagging法和Boosting法最显著的不同的是

将不同的分类算法套入此算法框架中在一定程度上可以提高原单一分类器的分类效果,但是也增大了计算量。

将决策树与这些算法框架进行结合得到新的算法如下:

在一般经验中,如果把好坏不等的东西掺到一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些。集成学习如何把多个学习器结合起来,获得比单一学习器更好的性能呢?这就是所谓的“结合策略”

将个体学习器结合在一起的时候使用的方法叫做结合策略。常用的结合策略有平均法、投票法、学习法。

对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说将每个基学习器的结果进行简单平均或者加权平均。

加权平均的权重一般是从训练数据中学习得到,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合。因此,实验和应用均显示出,加权平均法未必一定优于简单平均法。

一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。

对于分类问题的预测,我们通常使用的是投票法,基学习器分类结果的多数作为最终结果。

下面代码将三种算法组成的集成算法和算法本身进行比较:

在训练阶段,次级训练集是利用初级学习器产生的,若直接用初级学习器的训练集来产生次级训练集,则过拟合的风险会比较大;我们一般有两种方法来处理这个问题:

由于stacking中的每个基模型都需要对数据集进行划分后进行交叉训练,如果为每个模型都写这部分的代码会显得非常冗余,因此这里提供一种简便实现stacking的思路。

下面以两个基模型为例进行stacking,分别是xgboost和lightgbm,这两个模型都只需要实现BasicModel中的train和predict方法.

第一个基模型xgboost:

importxgboostasxgbclassXGBClassifier(BasicModel):def__init__(self):"""setparameters"""self.num_rounds=1000self.early_stopping_rounds=15self.params={'objective':'binary:logistic','eta':0.1,'max_depth':8,'eval_metric':'auc','seed':0,'silent':0}deftrain(self,x_train,y_train,x_val,y_val):print('trainwithxgbmodel')xgbtrain=xgb.DMatrix(x_train,y_train)xgbval=xgb.DMatrix(x_val,y_val)watchlist=[(xgbtrain,'train'),(xgbval,'val')]model=xgb.train(self.params,xgbtrain,self.num_rounds)watchlist,early_stopping_rounds=self.early_stopping_rounds)returnmodel,float(model.eval(xgbval).split()[1].split(':')[1])defpredict(self,model,x_test):print('testwithxgbmodel')xgbtest=xgb.DMatrix(x_test)returnmodel.predict(xgbtest)第二个基模型lightgbm:

importlightgbmaslgbclassLGBClassifier(BasicModel):def__init__(self):self.num_boost_round=2000self.early_stopping_rounds=15self.params={'task':'train','boosting_type':'dart','objective':'binary','metric':{'auc','binary_logloss'},'num_leaves':80,'learning_rate':0.05,#'scale_pos_weight':1.5,'feature_fraction':0.5,'bagging_fraction':1,'bagging_freq':5,'max_bin':300,'is_unbalance':True,'lambda_l2':5.0,'verbose':-1}deftrain(self,x_train,y_train,x_val,y_val):print('trainwithlgbmodel')lgbtrain=lgb.Dataset(x_train,y_train)lgbval=lgb.Dataset(x_val,y_val)model=lgb.train(self.params,lgbtrain,valid_sets=lgbval,verbose_eval=self.num_boost_round,num_boost_round=self.num_boost_round)early_stopping_rounds=self.early_stopping_rounds)returnmodel,model.best_score['valid_0']['auc']defpredict(self,model,x_test):print('testwithlgbmodel')returnmodel.predict(x_test,num_iteration=model.best_iteration)下一个步骤就是将这两个基模型的输出作为第二层模型的输入,这里选用的第二层模型是LogisticsRegression.

首先需要将各个基模型的输出reshape和concatenate成合适的大小:

lgb_classifier=LGBClassifier()lgb_oof_train,lgb_oof_test=lgb_classifier.get_oof(x_train,y_train,x_test)xgb_classifier=XGBClassifier()xgb_oof_train,xgb_oof_test=xgb_classifier.get_oof(x_train,y_train,x_test)input_train=[xgb_oof_train,lgb_oof_train]input_test=[xgb_oof_test,lgb_oof_test]stacked_train=np.concatenate([f.reshape(-1,1)forfininput_train],axis=1)stacked_test=np.concatenate([f.reshape(-1,1)forfininput_test],axis=1)

THE END
1.三种集成学习算法原理及核心公式推导本文主要介绍3种集成学习算法的原理及重要公式推导部分,包括随机森林(RandomForest)、自适应提升(AdaBoost)、梯度提升(Gradient Boosting)。仅对重点理论和公式推导环节做以简要介绍。 集成学习3大流派 01 集成学习流派 在经典机器学习场景下,当单个学习模型性能不足以有效满足算法精度时,人们开始向集成学习模型发力——https://blog.csdn.net/AAI666666/article/details/135975636
2.「机器学习」集成学习的原理算法与应用一、集成学习的原理 集成学习的核心思想是“三个臭皮匠,顶个诸葛亮”。它通过将多个个体学习器进行结合,使得整体性能超过单个学习器,从而提高了学习的效果。集成学习可以分为两种类型:同质集成和异质集成。同质集成指的是使用相同的学习算法构建多个个体学习器,而异质集成则是使用不同的学习算法构建个体学习器。集成https://baijiahao.baidu.com/s?id=1781225031906540919&wfr=spider&for=pc
3.三种集成学习算法原理及核心公式推导腾讯云开发者社区三种集成学习算法原理及核心公式推导 导读 本文主要介绍3种集成学习算法的原理及重要公式推导部分,包括随机森林(Random Forest)、自适应提升(AdaBoost)、梯度提升(Gradient Boosting)。仅对重点理论和公式推导环节做以简要介绍。 集成学习3大流派 01 集成学习流派https://cloud.tencent.com/developer/article/1745855
4.集成学习(面试准备)1、什么是集成学习 根据维基百科的说法:在统计学和机器学习中,集成学习方法使用多种学习算法来获得比单独使用任何单独的学习算法更好的预测性能。 具体说来,就是对于训练集数据,我们通过训练若干个个体学习器(弱学习器),通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。 https://www.jianshu.com/p/0bae8b16d794
5.详解Bagging算法的原理及Python实现pythonBagging(装袋算法)的集成学习方法非常简单,假设我们有一个数据集D,使用Bootstrap sample(有放回的随机采样,这里说明一下,有放回抽样是抽一个就放回一个,然后再抽,而不是这个人抽10个,再放回,下一个继续抽,它是每一个样本被抽中概率符合均匀分布)的方法取了k个数据子集(子集样本数都相等):D1,D2,…,Dkhttps://www.jb51.net/article/215053.htm
6.机器学习面试总结———(三)集成学习常用的算法包括随机森林、Adaboost、Gradient Boosting等。 24、Boosting算法的基本原理是什么 Boosting是一种集成学习方法,其基本原理是通过多个弱分类器的组合,来构建一个更为准确的分类器。 Boosting算法的基本思路是,通过对训练数据集进行多轮迭代,每轮迭代训练一个新的弱分类器,并根据分类器的表现进行样本https://developer.aliyun.com/article/1201776
7.基于Adaboost算法的输电线路舞动预警方法, 王建2, 梁允1, 熊小伏2, 翁世杰2 摘要:输电线路舞动是目前尚未被全面准确认识的世界性难题,已严重威胁输电系统的安全稳定运行。文章分析影响舞动的外界气象环境因素,并在此基础上提出一种基于Adaboost集成学习算法的输电线舞动预警方法。采用基于Gini指标的决策桩作为弱分类器,通过对多个弱分类器的训练及加权求和http://qks.cqu.edu.cn/html/cqdxzrcn/2016/1/20160105.htm
8.(十)机器学习集成学习思想概述51CTO博客一:什么是集成学习? 1:集成学习 (Ensemble Learning) 算法的基本思想:将多个分类器组合,从而实现一个预测效果更好的集成分类器。 2:工作原理:生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。 https://blog.51cto.com/u_15317888/5054480
9.TensorFlow机器学习常用算法解析和入门集成学习就是将很多分类器集成在一起,每个分类器有不同的权重,将这些分类器的分类结果合并在一起,作为最终的分类结果。最初集成方法为贝叶斯决策。 集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习https://www.w3cschool.cn/tensorflow/tensorflow-s8uq24ti.html
10.BoostKit大数据业界趋势鲲鹏大数据组件增强特性和典型配置集成学习 分布式矩阵乘法 矩阵计算是机器学习算法的核心组成部分,覆盖数据输入、算法描述、算法训练等计算过程。然而,在当前开源算法中,矩阵计算通常会成为计算瓶颈。鲲鹏BoostKit针对不同数据分布和规模下的矩阵计算场景,开展共性原理创新,在同等计算精度下,实现计算性能大幅度提升。 https://developer.huawei.com/consumer/cn/blog/topic/03898238728230088
11.科学网—[转载]进化集成学习算法综述2 中原工学院电子信息学院,河南 郑州 450007 【摘 要】进化集成学习结合了集成学习和进化算法两方面的优势,并在机器学习、数据挖掘和模式识别等领域被广泛应用。首先对进化集成学习算法的理论基础、组成结构及分类情况进行了概述。然后根据进化算法在集成学习中的优化任务,从样本选择、特征选择、集成模型参数组合优化、集https://wap.sciencenet.cn/blog-951291-1312816.html
12.九章算法精通机器学习算法理论与应用,包括传统机器学习、集成学习、大模型等。擅长授课领域:Transformer系列大模型算法及应用公开试讲课:BERT算法原理及NER实践案例 青石 讲师 10年开发经验,一线大厂技术专家,负责团队微前端、工程化工具建设 维维安 FAANG公司高级软件开发工程师/高级机器学习工程师 FAANG公司的高级软件开发工程师/http://jiuzhang.com/
13.4机器学习算法面试八股链接是一种基于boosting集成学习思想的加法模型,是一种用于回归的机器学习算法,该算法由多棵回归决策树组成,所有树的结论累加起来做最终答案。训练时采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。GBDT中的决策树是个弱模型,深度较小一般不会超过5https://www.nowcoder.com/discuss/509759767431098368
14.上海交大李金金团队:通过集成学习挖掘高性能鳍式场效应晶体管碲烯图2 模型表现及特征工程。 该项研究在第一性原理计算的基础上,研究了不同层中掺入非金属原子的α相碲烯的电子结构和迁移性能。结合集成分类算法及合理的筛选条件,最终从385个改性碲烯中确认了23个可用于制备高性能FinFET沟道的材料,并揭示了影响改性碲烯电子结构的关键因素。这种结合了理论计算和集成学习算法的新https://www.thepaper.cn/newsDetail_forward_22658407
15.集成学习机器之心1995年,Tin Kam Ho 提出了集成学习中最广为人知的算法——随机决策森林,并在几年后由Leo Breiman将随机森林方法进行系统的阐述,随机森林方法正式成为数据挖掘分类算法的重要组成部分。 1996年,Breiman 开发出 Bagging 预测器,并对其原理和训练进行了详细描述。他提出回归和分类的一个关键问题是预测方法的不稳定性——https://www.jiqizhixin.com/graph/technologies/29722de0-8501-4b01-9b73-189141b9eefd