0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending

颖脉Imgtec ? 2022-10-19 11:29 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:DeepHub IMBA

作者:Abhay Parashar


机器学习人工智能的一个分支领域,致力于构建自动学习和自适应的系统,它利用统计模型来可视化、分析和预测数据。一个通用的机器学习模型包括一个数据集(用于训练模型)和一个算法(从数据学习)。但是有些模型的准确性通常很低产生的结果也不太准确,克服这个问题的最简单的解决方案之一是在机器学习模型上使用集成学习。

491d77e0-4f2b-11ed-b116-dac502259ad0.png

集成学习是一种元方法,通过组合多个机器学习模型来产生一个优化的模型,从而提高模型的性能。集成学习可以很容易地减少过拟合,避免模型在训练时表现更好,而在测试时不能产生良好的结果。

总结起来,集成学习有以下的优点:

  • 增加模型的性能
  • 减少过拟合
  • 降低方差
  • 与单个模型相比,提供更高的预测精度。
  • 可以处理线性和非线性数据。

集成技术可以用来解决回归和分类问题

下面我们将介绍各种集成学习的方法:

Voting

Voting是一种集成学习,它将来自多个机器学习模型的预测结合起来产生结果。在整个数据集上训练多个基础模型来进行预测。每个模型预测被认为是一个“投票”。得到多数选票的预测将被选为最终预测。

4937d0f4-4f2b-11ed-b116-dac502259ad0.png

有两种类型的投票用于汇总基础预测-硬投票和软投票。

494ccacc-4f2b-11ed-b116-dac502259ad0.png

硬投票选择投票数最高的预测作为最终预测,而软投票将每个模型中每个类的概率结合起来,选择概率最高的类作为最终预测。

在回归问题中,它的工作方式有些不同,因为我们不是寻找频率最高的类,而是采用每个模型的预测并计算它们的平均值,从而得出最终的预测。

 from sklearn.ensemble import VotingClassifier
 
 ## Base Models
 from sklearn.tree import DecisionTreeClassifier
 from sklearn.linear_model import LogisticRegression
 from sklearn.naive_bayes import GaussianNB
 from sklearn.neighbors import KNeighborsClassifier
 from sklearn.svm import SVC
 
 
 ensemble_voting = VotingClassifier(
    estimators = [('dtc',DecisionTreeClassifier(random_state=42)),
                  ('lr', LogisticRegression()),
                  ('gnb', GaussianNB()),
                  ('knn',KNeighborsClassifier()),
                  ('svc',SVC())],
    voting='hard')
 ensemble_voting.fit(X_train,y_train)


Bagging

Bagging是采用几个弱机器学习模型,并将它们的预测聚合在一起,以产生最佳的预测。它基于bootstrap aggregation,bootstrap 是一种使用替换方法从集合中抽取随机样本的抽样技术。aggregation则是利用将几个预测结合起来产生最终预测的过程。

随机森林是利用Bagging的最著名和最常用的模型之一。它由大量的决策树组成,这些决策树作为一个整体运行。它使用Bagging和特征随机性的概念来创建每棵独立的树。每棵决策树都是从数据中随机抽取样本进行训练。在随机森林中,我们最终得到的树不仅接受不同数据集的训练,而且使用不同的特征来预测结果。

498584d4-4f2b-11ed-b116-dac502259ad0.png

Bagging通常有两种类型——决策树的集合(称为随机森林)和决策树以外的模型的集合。两者的工作原理相似,都使用聚合方法生成最终预测,唯一的区别是它们所基于的模型。在sklearn中,我们有一个BaggingClassifier类,用于创建除决策树以外的模型。

 ## Bagging Ensemble of Same Classifiers (Decision Trees)
 from sklearn.ensemble import RandomForestClassifier  
 classifier= RandomForestClassifier(n_estimators= 10, criterion="entropy")  
 classifier.fit(x_train, y_train)
 
 
 ## Bagging Ensemble of Different Classifiers
 from sklearn.ensemble import BaggingClassifier
 from sklearn.svm import SVC
 clf = BaggingClassifier(base_estimator=SVC(),
                          n_estimators=10, random_state=0)
 clf.fit(X_train,y_train)


Boosting

增强集成方法通过重视先前模型的错误,将弱学习者转化为强学习者。Boosting以顺序的方式实现同构ML算法,每个模型都试图通过减少前一个模型的误差来提高整个过程的稳定性。

4998b054-4f2b-11ed-b116-dac502259ad0.png

在训练n+1模型时,数据集中的每个数据点都被赋予了相等的权重,这样被模型n错误分类的样本就能被赋予更多的权重(重要性)。误差从n个学习者传递给n+1个学习者,每个学习者都试图减少误差。

ADA Boost是使用Boost生成预测的最基本模型之一。ADA boost创建一个决策树桩森林(一个树桩是一个只有一个节点和两个叶子的决策树),不像随机森林创建整个决策树森林。它给分类错误的样本分配更高的权重,并继续训练模型,直到得到较低的错误率。

 from sklearn.tree import DecisionTreeClassifier
 from sklearn.ensemble import AdaBoostClassifier
 
 dt = DecisionTreeClassifier(max_depth=2, random_state=0)
 adc = AdaBoostClassifier(base_estimator=dt, n_estimators=7, learning_rate=0.1, random_state=0)
 
 adc.fit(x_train, y_train)


Stacking

Stacking也被称为叠加泛化,是David H. Wolpert在1992年提出的集成技术的一种形式,目的是通过使用不同的泛化器来减少错误。

49b10410-4f2b-11ed-b116-dac502259ad0.png

叠加模型利用来自多个基础模型的预测来构建元模型,用于生成最终的预测。堆叠模型由多层组成,其中每一层由几个机器学习模型组成,这些模型的预测用于训练下一层模型。

在叠加过程中,将数据分为训练集和测试集两部分。训练集会被进一步划分为k-fold。基础模型在k-1部分进行训练,在k??部分进行预测。这个过程被反复迭代,直到每一折都被预测出来。然后将基本模型拟合到整个数据集,并计算性能。这个过程也适用于其他基本模型。

来自训练集的预测被用作构建第二层或元模型的特征。这个第二级模型用于预测测试集。

 from sklearn.neighbors import KNeighborsClassifier
 from sklearn.tree import DecisionTreeClassifier
 from sklearn.svm import SVC
 from sklearn.linear_model import LogisticRegression
 from sklearn.ensemble import StackingClassifier
 
 base_learners = [
                  ('l1', KNeighborsClassifier()),
                  ('l2', DecisionTreeClassifier()),
                  ('l3',SVC(gamma=2, C=1)))
                ]
 model = StackingClassifier(estimators=base_learners, final_estimator=LogisticRegression(),cv=5)
 model.fit(X_train, y_train)


Blending

Blending是从Stacking派生出来另一种形式的集成学习技术,两者之间的唯一区别是它使用来自一个训练集的保留(验证)集来进行预测。简单地说,预测只针对保留的数据集。保留的数据集和预测用于构建第二级模型。

49c731d6-4f2b-11ed-b116-dac502259ad0.png

 import numpy as np
 from sklearn.datasets import make_classification
 from sklearn.model_selection import train_test_split
 from sklearn.metrics import accuracy_score
 
 ## Base Models
 from sklearn.neighbors import KNeighborsClassifier
 from sklearn.tree import DecisionTreeClassifier
 from sklearn.svm import SVC
 
 ## Meta Learner
 from sklearn.linear_model import LogisticRegression
 
 ## Creating Sample Data
 X,y = make_classification(n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=42)
 
 ## Training a Individual Logistic Regression Model
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
 logrec = LogisticRegression()
 logrec.fit(X_train,y_train)
 pred = logrec.predict(X_test)
 score = accuracy_score(y_test, pred)
 print('Base Model Accuracy: %.3f' % (score*100))
 
 ## Defining Base Models
 def base_models():
  models = list()
  models.append(('knn', KNeighborsClassifier()))
  models.append(('dt', DecisionTreeClassifier()))
  models.append(('svm', SVC(probability=True)))
  return models
 
 ## Fitting Ensemble Blending Model
 ## Step 1:Splitting Data Into Train, Holdout(Validation) and Test Sets
 X_train_full, X_test, y_train_full, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
 X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.33, random_state=1)
 
 ## Step 2: train base models on train set and make predictions on validation set
 models = base_models()
 meta_X = list()
 for name, model in models:
    # training base models on train set
 model.fit(X_train, y_train)
 # predict on hold out set
 yhat = model.predict_proba(X_val)
    # storing predictions
 meta_X.append(yhat)
 # horizontal stacking predictions
 meta_X = np.hstack(meta_X)
 
 ## Step 3: Creating Blending Meta Learner
 blender = LogisticRegression()
 ## training on base model predictions
 blender.fit(meta_X, y_val)
 
 ## Step 4: Making predictions using blending meta learner
 meta_X = list()
 for name, model in models:
  yhat = model.predict_proba(X_test)
  meta_X.append(yhat)
 meta_X = np.hstack(meta_X)
 y_pred = blender.predict(meta_X)
 
 # Evaluate predictions
 score = accuracy_score(y_test, y_pred)
 print('Blending Accuracy: %.3f' % (score*100))
 ---------------------------------
 Base Model Accuracy: 82.367
 Blending Accuracy: 96.733

总结

在阅读完本文之后,您可能想知道是否有选择一个更好的模型最好的方法或者如果需要的话,使用哪种集成技术呢?

在这个问题时,我们总是建议从一个简单的个体模型开始,然后使用不同的建模技术(如集成学习)对其进行测试。在某些情况下,单个模型可能比集成模型表现得更好,甚至好很多。

需要说明并且需要注意的一点是:集成学习绝不应该是第一选择,而应该是最后一个选择。原因很简单:训练一个集成模型将花费很多时间,并且需要大量的处理能力。

回到我们的问题,集成模型旨在通过组合同一类别的几个基本模型来提高模型的可预测性。每种集成技术都是最好的,有助于提高模型性能。

如果你正在寻找一种简单且易于实现的集成方法,那么应该使用Voting。如果你的数据有很高的方差,那么你应该尝试Bagging。如果训练的基础模型在模型预测中有很高的偏差,那么可以尝试不同的Boosting技术来提高准确性。如果有多个基础模型在数据上表现都很好好,并且不知道选择哪一个作为最终模型,那么可以使用Stacking 或Blending的方法。当然具体哪种方法表现得最好还是要取决于数据和特征分布。

最后集成学习技术是提高模型精度和性能的强大工具,它们很容易减少数据过拟合和欠拟合的机会,尤其在参加比赛时这是提分的关键。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8513

    浏览量

    135107
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用单片机直接输出4-20mA?GP210高集成方案。

    如何使用单片机直接输出4-20mA?GP210高集成方案。
    的头像 发表于 08-15 17:30 ?174次阅读
    如何使用单片机直接输出4-20mA?GP210高<b class='flag-5'>集成方</b>案。

    模型推理显存和计算量估计方法研究

    方法。 一、引言 大模型推理是指在已知输入数据的情况下,通过深度学习模型进行预测或分类的过程。然而,大模型的推理过程对显存和计算资源的需求较
    发表于 07-03 19:43

    边缘计算中的机器学习:基于 Linux 系统的实时推理模型部署与工业集成

    你好,旅行者!欢迎来到Medium的这一角落。在本文中,我们将把一个机器学习模型(神经网络)部署到边缘设备上,利用从ModbusTCP寄存器获取的实时数据来预测一台复古音频放大器的当前健康状况。你将
    的头像 发表于 06-11 17:22 ?425次阅读
    边缘计算中的<b class='flag-5'>机器</b><b class='flag-5'>学习</b>:基于 Linux 系统的实时推理<b class='flag-5'>模型</b>部署与工业<b class='flag-5'>集成</b>!

    机器学习模型市场前景如何

    当今,随着算法的不断优化、数据量的爆炸式增长以及计算能力的飞速提升,机器学习模型的市场前景愈发广阔。下面,AI部落小编将探讨机器学习
    的头像 发表于 02-13 09:39 ?421次阅读

    传统机器学习方法和应用指导

    用于开发生物学数据的机器学习方法。尽管深度学习(一般指神经网络算法)是一个强大的工具,目前也非常流行,但它的应用领域仍然有限。与深度学习相比,传统
    的头像 发表于 12-30 09:16 ?1311次阅读
    传统<b class='flag-5'>机器</b><b class='flag-5'>学习方法</b>和应用指导

    【「具身智能机器人系统」阅读体验】2.具身智能机器人大模型

    。 多模态融合的创新与突破 机器人控制技术的另一个重要突破在于多模态大模型的应用。相比于仅通过文字进行人机交互的传统方法,现代机器人能够融合视觉、声音、定位等多模态输入信息,为任务执行
    发表于 12-29 23:04

    【「具身智能机器人系统」阅读体验】1.全书概览与第一章学习

    非常感谢电子发烧友提供的这次书籍测评活动!最近,我一直在学习模型和人工智能的相关知识,深刻体会到机器人技术是一个极具潜力的未来方向,甚至可以说是推动时代变革的重要力量。能参与这次活动并有机会深入
    发表于 12-27 14:50

    《具身智能机器人系统》第7-9章阅读心得之具身智能机器人与大模型

    医疗领域,手术辅助机器人需要毫米级的精确控制,书中有介绍基于视觉伺服的实时控制算法,以及如何利用大模型优化手术路径规划。工业场景中,协作机器人面临的主要挑战是快速适应新工艺流程。具身智能通过在线
    发表于 12-24 15:03

    PWM信号生成方法 PWM调制原理讲解

    PWM(脉冲宽度调制,Pulse Width Modulation)是一种重要的模拟信号电平数字编码方法,在电子技术和控制领域具有广泛应用。以下是对PWM信号生成方法和PWM调制原理的介绍: PWM
    的头像 发表于 11-28 16:34 ?5134次阅读

    什么是机器学习?通过机器学习方法能解决哪些问题?

    来源:Master编程树“机器学习”最初的研究动机是让计算机系统具有人的学习能力以便实现人工智能。因为没有学习能力的系统很难被认为是具有智能的。目前被广泛采用的
    的头像 发表于 11-16 01:07 ?1077次阅读
    什么是<b class='flag-5'>机器</b><b class='flag-5'>学习</b>?通过<b class='flag-5'>机器</b><b class='flag-5'>学习方法</b>能解决哪些问题?

    LLM和传统机器学习的区别

    在人工智能领域,LLM(Large Language Models,大型语言模型)和传统机器学习是两种不同的技术路径,它们在处理数据、模型结构、应用场景等方面有着显著的差异。 1.
    的头像 发表于 11-08 09:25 ?2150次阅读

    AI大模型与深度学习的关系

    AI大模型与深度学习之间存在着密不可分的关系,它们互为促进,相辅相成。以下是对两者关系的介绍: 一、深度学习是AI大模型的基础 技术支撑 :深度学习
    的头像 发表于 10-23 15:25 ?3095次阅读

    AI大模型与传统机器学习的区别

    AI大模型与传统机器学习在多个方面存在显著的区别。以下是对这些区别的介绍: 一、模型规模与复杂度 AI大模型 :通常包含数十亿甚至数万亿的参
    的头像 发表于 10-23 15:01 ?2828次阅读

    万界星空科技MES数据的集成方

    MES系统与其他系统常见的集成方式。根据实际需求和系统环境,选择适合的集成方式可以实现不同系统之间的协同工作,提高生产效率和管理水平。具体的集成方式可能因企业和行业的不同而有所差异。
    的头像 发表于 10-09 15:30 ?445次阅读
    万界星空科技MES数据的<b class='flag-5'>集成方</b>式

    常用的devops工具集成方法

    常用的devops工具集成方法涵盖了软件开发和运维的各个方面,从版本控制到自动化构建、测试、部署和监控。这些工具的有效集成可以帮助团队提高协作效率,减少沟通障碍,实现快速、高质量的软件交付。
    的头像 发表于 10-09 11:21 ?603次阅读