机器学习 - 提升模型性能

摘要:本文系统介绍了提升机器学习模型性能的集成学习技术,重点分析了Boosting方法及其实现。文章详细阐述了特征工程、超参数调优、正则化等关键技术,并通过Python代码示例展示了装袋决策树(77%准确率)、随机森林(76%)、极端随机树(75.5%)、AdaBoost(75%)、梯度提升(77.5%)和投票集成(74%)等算法在糖尿病数据集上的应用效果。研究表明,集成学习方法能有效提升模型性能,其中梯度提升方法表现最优。这些技术可通过scikit-learn等库实现,为数据科学家提供了实用的性能提升方案。

目录

机器学习 - 提升模型性能

示例

输出结果

集成学习的性能提升

集成学习方法

装袋集成算法

装袋决策树(Bagged Decision Tree)

输出结果

随机森林(Random Forest)

输出结果

极端随机树(Extra Trees)

输出结果

提升集成算法

AdaBoost

输出结果

随机梯度提升(Stochastic Gradient Boosting)

输出结果

投票集成算法

输出结果


机器学习 - 提升模型性能

提升(Boosting)是一种流行的集成学习技术,它结合多个弱学习器来构建一个强学习器。其工作原理是:在数据子集上迭代训练弱学习器,并为误分类样本分配更高的权重,以提高它们在后续迭代中的重要性。重复此过程,直到达到理想的性能水平。

以下是几种提升机器学习模型性能的技术:

  1. 特征工程:特征工程指从现有特征中创建新特征,或对现有特征进行转换,使其对模型更具信息价值。相关技术包括独热编码、缩放、归一化和特征选择等。
  2. 超参数调优:超参数是训练过程中不会被模型学习、而是由数据科学家设定的参数。它们控制着模型的行为,调优超参数能显著影响模型性能。网格搜索和随机搜索是超参数调优的常用技术。
  3. 集成学习:集成学习通过组合多个模型来提升性能,可采用装袋(Bagging)、提升(Boosting)和堆叠(Stacking)等技术构建集成模型。随机森林(Random Forests)是装袋集成的典型示例,而梯度提升机(GBMs)则是提升集成的代表。
  4. 正则化:正则化通过在损失函数中添加惩罚项来防止过拟合。L1 正则化(Lasso)和 L2 正则化(Ridge)是线性模型中常用的正则化技术,而丢弃法(Dropout)则适用于神经网络。
  5. 数据增强:数据增强通过对现有数据应用旋转、缩放、翻转等变换生成新数据,有助于减少过拟合并提升模型性能。
  6. 模型架构:模型的架构对其性能有显著影响。深度学习和卷积神经网络(CNNs)等技术可用于构建更复杂的模型,从而更好地学习数据中的复杂模式。
  7. 早停法:早停法通过在验证集上模型性能停止提升时终止训练过程来防止过拟合,避免模型继续学习数据中的噪声,进而提高泛化能力。
  8. 交叉验证:交叉验证通过在多个数据子集上评估模型性能,帮助识别过拟合问题,并可用于选择模型的最佳超参数。

这些技术可通过 Python 中的多种机器学习库实现,如 scikit-learn、TensorFlow 和 Keras。借助这些技术,数据科学家能够提升模型性能,实现更精准的预测。

以下是使用 Scikit-learn 实现交叉验证的示例:

示例

from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score from sklearn.ensemble import GradientBoostingClassifier # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target # 创建梯度提升分类器 gb_clf = GradientBoostingClassifier() # 对分类器进行5折交叉验证 scores = cross_val_score(gb_clf, X, y, cv=5) # 打印交叉验证分数的平均准确率和标准差 print("准确率:%0.2f(±%0.2f)" % (scores.mean(), scores.std() * 2))

输出结果

运行上述代码后,将得到以下输出:

plaintext

准确率:0.96(±0.07)

集成学习的性能提升

集成模型通过组合多个模型,能够提升机器学习的结果。本质上,集成模型由多个独立训练的监督学习模型组成,通过多种方式融合它们的结果,以获得比单个模型更优的预测性能。集成方法可分为以下两类:

  1. 序列集成方法:顾名思义,这类集成方法中,基学习器是顺序生成的。其设计初衷是利用基学习器之间的依赖性。
  2. 并行集成方法:这类集成方法中,基学习器是并行生成的。其核心目的是利用基学习器之间的独立性。

集成学习方法

以下是最常用的集成学习方法(即融合不同模型预测结果的方法):

  1. 装袋(Bagging):装袋又称自助聚合(bootstrap aggregation)。在装袋方法中,集成模型通过组合在随机生成的训练样本上训练的各个模型的预测结果,来提高预测准确率并降低模型方差。集成模型的最终预测结果由所有单个估计器的预测结果取平均值得到。随机森林是装袋方法的典型示例。
  2. 提升(Boosting):提升方法构建集成模型的核心原则是增量式构建 —— 依次训练每个基模型估计器。正如其名,它通过在多轮训练数据迭代中顺序训练多个弱基学习器,组合形成强大的集成模型。在弱基学习器的训练过程中,会给之前误分类的样本分配更高的权重。AdaBoost 是提升方法的代表。
  3. 投票(Voting):在这种集成学习模型中,会构建多个不同类型的模型,并使用均值、中位数等简单统计方法融合预测结果。该融合后的预测结果将作为额外输入用于训练,以得出最终预测。

装袋集成算法

以下是三种装袋集成算法:

装袋决策树(Bagged Decision Tree)

已知装袋集成方法适用于高方差算法,而决策树算法正是这类算法的佼佼者。在以下 Python 示例中,我们将使用 sklearn 的 BaggingClassifier 函数,结合分类与回归树算法(DecisionTreeClassifier),在皮马印第安人糖尿病数据集上构建装袋决策树集成模型。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

seed = 7 kfold = KFold(n_splits=10, random_state=seed) cart = DecisionTreeClassifier()

4,指定要构建的树的数量(此处构建 150 棵树):

num_trees = 150

5,构建模型:

model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)

6,计算并打印结果:

results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7733766233766234

上述输出表明,我们的装袋决策树分类器模型准确率约为 77%。

随机森林(Random Forest)

随机森林是装袋决策树的延伸。对于单个分类器,训练数据集的样本采用有放回抽样,但构建树时会通过特定方式降低它们之间的相关性。此外,在每棵树的构建过程中,并非贪婪地选择最佳分裂点,而是从随机选择的特征子集中确定分裂点。

在以下 Python 示例中,我们将使用 sklearn 的 RandomForestClassifier 类,在皮马印第安人糖尿病数据集上构建装袋随机森林集成模型。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

seed = 7 kfold = KFold(n_splits=10, random_state=seed)

4,指定要构建的树的数量和分裂点选择的特征数量(此处构建 150 棵树,从 5 个特征中选择分裂点):

num_trees = 150 max_features = 5

5,构建模型:

model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)

6,计算并打印结果:

results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7629357484620642

上述输出表明,我们的装袋随机森林分类器模型准确率约为 76%。

极端随机树(Extra Trees)

极端随机树是装袋决策树集成方法的另一种延伸。该方法中,随机树基于训练数据集的样本构建。

在以下 Python 示例中,我们将使用 sklearn 的 ExtraTreesClassifier 类,在皮马印第安人糖尿病数据集上构建极端随机树集成模型。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import ExtraTreesClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

seed = 7 kfold = KFold(n_splits=10, random_state=seed)

4,指定要构建的树的数量和分裂点选择的特征数量(此处构建 150 棵树,从 5 个特征中选择分裂点):

num_trees = 150 max_features = 5

5,构建模型:

model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)

6,计算并打印结果:

results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7551435406698566

上述输出表明,我们的装袋极端随机树分类器模型准确率约为 75.5%。

提升集成算法

以下是两种最常用的提升集成算法:

AdaBoost

AdaBoost 是最成功的提升集成算法之一。该算法的核心在于为数据集中的样本分配权重的方式 —— 这使得算法在构建后续模型时,可减少对部分样本的关注。

在以下 Python 示例中,我们将使用 sklearn 的 AdaBoostClassifier 类,在皮马印第安人糖尿病数据集上构建 AdaBoost 集成分类模型。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import AdaBoostClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

seed = 5 kfold = KFold(n_splits=10, random_state=seed)

4,指定要构建的树的数量(此处构建 50 棵树):

num_trees = 50

5,构建模型:

model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)

6,计算并打印结果:

results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7539473684210527

上述输出表明,我们的 AdaBoost 集成分类器模型准确率约为 75%。

随机梯度提升(Stochastic Gradient Boosting)

随机梯度提升又称梯度提升机(Gradient Boosting Machines)。在以下 Python 示例中,我们将使用 sklearn 的 GradientBoostingClassifier 类,在皮马印第安人糖尿病数据集上构建随机梯度提升集成分类模型。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import GradientBoostingClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

seed = 5 kfold = KFold(n_splits=10, random_state=seed)

4,指定要构建的树的数量(此处构建 50 棵树):

num_trees = 50

5,构建模型:

model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)

6,计算并打印结果:

results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7746582365003418

上述输出表明,我们的梯度提升集成分类器模型准确率约为 77.5%。

投票集成算法

如前所述,投票方法首先从训练数据集构建两个或多个独立模型,然后由投票分类器封装这些模型,并在需要处理新数据时,对各子模型的预测结果取平均值。

在以下 Python 示例中,我们将使用 sklearn 的 VotingClassifier 类,在皮马印第安人糖尿病数据集上构建投票集成分类模型。我们将逻辑回归、决策树分类器和支持向量机(SVM)的预测结果组合起来,用于解决分类问题。

1,首先导入所需的包:

from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.ensemble import VotingClassifier

2,加载皮马糖尿病数据集(与之前示例一致):

path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:, 0:8] Y = array[:, 8]

3,设置 10 折交叉验证的输入:

kfold = KFold(n_splits=10, random_state=7)

4,创建子模型:

estimators = [] model1 = LogisticRegression() estimators.append(('logistic', model1)) model2 = DecisionTreeClassifier() estimators.append(('cart', model2)) model3 = SVC() estimators.append(('svm', model3))

6,组合上述子模型的预测结果,创建投票集成模型:

ensemble = VotingClassifier(estimators) results = cross_val_score(ensemble, X, Y, cv=kfold) print(results.mean())

输出结果

plaintext

0.7382262474367738

上述输出表明,我们的投票集成分类器模型准确率约为 74%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026必备!本科生毕业论文写作软件TOP9测评

2026必备!本科生毕业论文写作软件TOP9测评 2026年本科生论文写作软件测评:为何需要这份榜单? 随着高校教育对学术规范要求的不断提升,本科生在撰写毕业论文过程中面临越来越多挑战。从选题构思到文献综述,从内容撰写到…

超详细版:ARM64虚拟化技术在云服务中的实现

ARM64虚拟化:云服务背后的高效引擎你有没有想过,当你在AWS上启动一台A1实例,或是在华为云创建一个基于鲲鹏的虚拟机时,底层究竟发生了什么?为什么越来越多的云厂商开始从x86转向ARM架构?答案就藏在ARM64虚拟…

springboot148基于javaweb技术与SSM框架的智慧商城网上购物电商平台的设计与实现

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 智慧商城网上购物电商平台基于SpringBoot 1.4.8框架与JavaWeb技术,结合SSM(SpringSpringMVCMy…

计算机毕业设计springboot基于web的流浪动物信息管理系统 基于SpringBoot的流浪宠物救助与领养平台 Web端流浪猫狗信息追踪及领养服务系统

计算机毕业设计springboot基于web的流浪动物信息管理系统285i7752 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。当城市化的脚步越来越快,街巷里出现的流浪动物也在…

springboot149基于Javaweb的高校图书馆图书借阅管理系统的设计与实现

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 高校图书馆作为学术资源的核心载体,其信息化管理水平直接影响师生获取知识的效率。基于SpringBoot 1.4.9框…

母线弧光保护装置在中低压开关柜中应用

母线弧光保护装置概述母线弧光保护装置是一种用于检测和快速切除中低压开关柜内部弧光故障的保护设备。弧光故障通常由绝缘击穿、接触不良或操作失误引起,可能引发高温、高压和爆炸,对设备和人员安全构成严重威胁。该装置通过检测弧光信号和电流突变&…

莫凡电视:全国地方台全覆盖!流畅播放技术解析

各位影视与电视技术爱好者,今天分享莫凡电视的核心优势——聚焦全国地方台全量覆盖与播放流畅度,技术点扎实易懂,适配智能电视、机顶盒等终端,完美满足不同地区用户观看本地频道的需求。 地方台接收核心采用多协议解码引擎&#…

产品经理值得关注的 AI 工具盘点:从“写需求”到“直接交付”

过去几年,AI 在产品领域的作用主要集中在辅助思考:写 PRD、做竞品分析、优化文案。但一个明显的变化正在发生——AI 开始进入真正的交付环节,直接影响产品从想法到落地的效率。 对产品经理来说,这意味着一个新的能力边界正在被打…

基于OpenPLC的产线控制实战案例详解

用树莓派OpenPLC重构产线控制:一个工业自动化工程师的实战手记最近接手了一个老产线升级项目,客户原用的是三菱FX3U PLC,配了个触摸屏,运行了快八年。系统稳定但扩展性极差——想加两个传感器?得换PLC模块、改接线、重…

注意力机制:Transformer模型的深入解析

一、 引言自从Google于2017年提出Transformer模型以来,它已经成为深度学习领域的基石,尤其是在自然语言处理(NLP)和计算机视觉(CV)领域取得了显著的成果。Transformer通过其核心组件—注意力机制—革新了神…

电影解说详细教程:从「一条视频」到「持续更新」

很多人第一次做电影解说,都会经历一个相似的过程:第一条视频做得很认真,从选片到剪辑反复打磨,虽然播放量未必高,但至少“做出来了”。可问题也往往从这里开始——第二条、第三条迟迟没动静,更新开始断断续…

电脑怎么通过一个网卡访问多个网段?一招解决

一、案例简介在自动化数据采集中我们经常会遇到这样一个问题,由于设备前期导入没有进行系统性规划IP地址,导致设备不同IP网段,导致如果需要统一采集设备数据,如果通过增加网卡解决问题,这样不仅成本过高,同时电脑…

对话管理在智能车载系统中的应用实践

对话管理在智能车载系统中的应用实践:从痛点到落地的全链路解析 引言:为什么车载系统需要“会聊天”的对话管理? 1.1 车载场景的“致命痛点”:安全与效率的矛盾 开车时,你有没有过这样的经历? 想导航到机场,却要盯着屏幕点3次菜单、输入5个汉字,眼睛离开路面2秒; 想…

【Da】媒体、快编面板

--本篇导航--媒体面板快编面板媒体面板 顾名思义,就是导入各种视频、图片、音频等素材的。智能媒体夹 可支持单个文件、Shift多个文件、文件夹的拖入。可对素材做各种条件筛选。共享媒体夹场景剪切探测 可以自动识别素…

【计算机毕业设计案例】卷神经网络基于python-CNN深度学习训练识别不同颜色的鞋子

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot150基于javaweb的宠物店猫狗粮商城系统

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 该系统基于Spring Boot 1.5.0框架开发,采用JavaWeb技术构建一个专注于宠物猫狗粮销售的电商平台。系统设计…

2026年TikTok广告代理商推荐:应对算法迭代与合规风控的优选服务商

2026年TikTok虽已成为全球品牌出海的必争之地,但随着欧盟DMA法案落地及平台算法的周级更新,广告主正面临流量精准度下降与合规成本激增的双重挑战。企业在选择代理商时,不应仅关注开户速度,更需考量其应对全球数据…

20260120 之所思 - 人生如梦

20260120 之所思做的好的事情:1. 提前将一周重要的的事情与各位组长梳理清楚,确保事情按重要程度 优先级高低合理的排列和处理。 -- 作为软件的负责人,自己亲历亲为去做事情的时间已经很少,应该要放眼全局,做好统…

springboot151基于javaweb的线上鲜花商城管理系统的设计与实现

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着互联网技术的快速发展,电子商务已成为现代商业活动的重要组成部分。鲜花作为一种特殊的商品&#xff…

智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解

智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解 元数据框架 标题:智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解 关键词:智能运维(AIOps)、服务网格(Istio)、微服务架构、可观测性、机器学习、流量管理、自动修复、根因分析 摘要:本…