模型融合的方法

集成学习:通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统、基于委员会的学习等。(集成学习不是只有同质学习器的集成,还有异质学习器的集成)

模型融合:通过多个模型共同决策提升任务的效果,是一种基本可以稳定提升任务效果的方法。

融合原则:挑选效果尽可能好,而差异尽可能大的模型进行融合

常见方法:投票、求均值、stacking、blending

①voting(投票)法:

适用于分类任务, 对多个学习器的预测结果进行投票,即少数服从多数。

投票方法有两种:普通投票&加权投票法。加权的权重可以人工主观设置或者根据模型评估分数来设置权重。投票法需要3个及3个以上的模型,同时要保证模型的多样性。

Voting可通过VotingClassifierVotingRegressor使用。可以将基本模型列表作为参数,列表中的每个模型都必须是具有名称和模型的元组

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import VotingClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression# 创建数据集
X, y = make_classification(random_state=1)# 模型列表
models = [('lr', LogisticRegression()), ('nb', GaussianNB())]# 创建voting模型
model = VotingClassifier(models, voting='soft')# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

②平均法:适用于回归、分类(针对概率)任务,对多个学习器的预测结果进行平均,平均法的好处在于平滑结果,从而减少过拟合,常见的平均法有三种:算数平均法、几何平均法和加权平均法。

假设有n个模型的预测结果\hat{y},则三类平均计算方式如下:

(1)算术平均法:

\bar{\hat{y}}=\frac{1}{n}\left ( \hat{y_{1}}+ \hat{y_{2}}+\cdots + \hat{y_{n}} \right )

(2)几何平均法:

\bar{\hat{y}}=\sqrt[n]{\hat{y_{1}}\times \hat{y_{2}}\times \cdots \times \hat{y_{n}}}

(3)加权平均法

\bar{\hat{y}}=\frac{w_{1}\hat{y_{1}}+w_{2}\hat{y_{2}}+\cdots +w_{n}\hat{y_{n}}}{w_{1}+w_{2}+\cdots +w_{n}}

几何平均法受极端的影响较算术平均法小,另外,关于加权平均法的权重,也可以人工主观或根据模型分数来设置,同时也建议尽量平均差异性小的模型们。

③排序法:如果模型评估标准是与排序或者阈值相关(如AUC),简单使用平均法并不见得都能取得较好的结果。

排序法的具体步骤:

(1)对预测结果进行排序

(2)对排序序号进行平均

(3)对平均排序序号进行归一化

③stacking:

思路:基于原始数据,训练多个基学习器,然后将基学习器的预测结果组合成新的数据集,去训练一个新的学习器。

stacking主要分为以下三类:

单层stacking

单层stacking是指在基学习器上只堆叠一层元学习器

基学习器可以是同质或异质的模型,而元学习器在传统做法中是选用逻辑回归模型,也能使用非线性模型作为元学习器,例如GBDT、KNN、NN、RF等

多层stacking

其他技术与stacking的结合

stacking也可以与无监督学习方法结合。

希望使用一个模型去融合模型,但是如果使用相同的数据去训练用于融合的模型,存在数据泄露的问题,导致过拟合,所以stacking采用交叉验证的方法缓解该问题。

        步骤:

                ①n个模型把数据分成n分(可以任意划分,只要训练模型和融合模型分开)

                ②每次取其中的(n-1)份数据用于训练模型,用剩下的1份数据训练融合模型

                ③测试模型,所有的训练模型预测测试集,得到output求均值,然后传入融合模型,得                        到最终的结果。

Stacking需要和交叉验证搭配使用,也可以通过StackingClassifierStackingRegressor使用,可以将基本模型作为模型的参数提供。

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import StackingClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression# 创建数据集
X, y = make_classification(random_state=1)# 模型列表
models = [('knn', KNeighborsClassifier()), ('tree', DecisionTreeClassifier())]# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

④blending(交叉融合法):基学习器和元学习器本质上都是用同一训练集训练的,这样就会造成信息泄露,从而导致元学习器过拟合数据集,blending的提出,对原先的数据集先划分出一个较小的留出集,比如10%训练集被当做留出集,那么blending用90%的数据做基学习器的训练,而10%留出集用作训练元学习器,这样基学习器和元学习器是用不同的数据集来训练的,解决数据泄露的问题。

        步骤:

                ①将训练集划分为训练集和验证集

                ②blending不同模型的训练集是一样的(模型的精度高和模型间的差异性大都可以提升模型效果,所以可以采用一些采样方法和数据增强方法增加样本多样性)

                ③用训练集训练多个模型,用验证集训练融合模型,这里有两种方式训练融合模型,可以直接用均值,也可以采用带权重内的均值。

⑤boosting:在迭代过程中尝试纠先前模型所产生的错误,迭代次数越多集成产生的错误就越少,至少在数据支持的限制范围内并且在过渡拟合训练数据集之前。

Boosting想法最初是作为一种理论思想发展起来的,AdaBoost算法是第一个成功实现基于Boosting的集成算法的方法。

AdaBoost在加权训练数据集的版本上拟合决策树,以便树更多地关注先前成员出错的示例。AdaBoost不是完整的决策树,而是使用非常简单的树,在做出预测之前对一个输入变量做出单一决策。这些短树被称为决策树桩。

AdaBoost可通过AdaBoostClassifierAdaBoostRegressor使用,它们默认使用决策树(决策树桩)作为基本模型,可以通过n_estimators参数指定要创建的树的数量。

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import AdaBoostClassifier# 创建样例数据集
X, y = make_classification(random_state=1)# 创建adaboost模型
model = AdaBoostClassifier(n_estimators=50)# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

gradient boosting

Gradient Boosting是一个用于提升集成算法的框架,是对AdaBoosting的扩展。Gradient Boosting定义为统计框架下的加法模型,并允许使用任意损失函数以使其更加灵活,并允许使用损失惩罚(收缩)来减少过度拟合。

Gradient Boosting引入了Bagging的操作,例如训练数据集行和列的采样,称为随机梯度提升。

对于结构化或表格数据来说,Gradient Boosting一种非常成功的集成技术,尽管由于模型是按顺序添加的,因此拟合模型可能会很慢。已经开发了更有效的实现,如XGBoost、LightGBM。

Gradient Boosting在可以通过GradientBoostingClassifierGradientBoostingRegressor使用,默认使用决策树作为基础模型。您可以通过n_estimators参数指定要创建的树的数量,通过learning_rate参数控制每棵树的贡献的学习率。

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import GradientBoostingClassifier# 创建样例数据集
X, y = make_classification(random_state=1)# 创建GradientBoosting模型
model = GradientBoostingClassifier(n_estimators=50)# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

⑥bagging:通过采样训练数据集的样本,训练得到多样的模型,进而得到多样的预测结果,在结合模型的预测结果时,可以对单个模型预测结果进行投票或平均。

bagging的关键是对数据集的采样方法,常见的方式可以从行(样本)维度进行采样,这里是有放回采样

Bagging可通过BaggingClassifierBaggingRegressor使用,默认情况下它们使用决策树作为基本模型,可以通过n_estimators参数指定要创建的树的数量。

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier# 创建样例数据集
X, y = make_classification(random_state=1)# 创建bagging模型
model = BaggingClassifier(n_estimators=50)# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

random forest随机森林是bagging与树模型的结合:

        随机森林集成训练数据集的不同引导样本上拟合决策树

        随机森林还将对每个数据集的特征(列)进行采样

在构建每个决策树时,随机森林不是在选择分割点时考虑所有的特征,而是将特征限制为特征的随机子集。

随机森林集成可通过RandomForestClassifierRandomForestRegressor类在 scikit-learn  中获得。您可以通过n_estimators参数指定要创建的树的数量,并通过max_features参数指定要在每个分割点考虑的随机选择的特征的数量。

from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import RandomForestClassifier# 创建样例数据集
X, y = make_classification(random_state=1)# 创建随机森林模型
model = RandomForestClassifier(n_estimators=50)# 设置验证集数据划分方式
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# 验证模型精度
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)# 打印模型的精度
print('Mean Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

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

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

相关文章

阿里云乱扣费故障,技术堪忧

2024年4月3日,距离2023年11月的故障没有多久,阿里云又出现乱扣费故障,导致账号欠费3000多,oss,块存储,cdn等所有后付费服务停止工作,不知道这个故障能算什么级别的。 凌晨1点多,收到…

09 flink-sql 中基于 mysql-cdc 的 select * from test_user 的具体实现

前言 这也是最近帮一个朋友看问题 遇到的一个问题 然后 引发了一下 对于 flink-sql 里面的一些 常规处理的思考, 理解 原始问题主要是 在测试库可以使用 flink-sql 可以正常同步, 但是 在生产环境 无法正常同步数据 这个问题 我们后面单独 记录一篇文章 测试用例 下载…

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III

代码随想录算法训练营第48天|198.打家劫舍|213.打家劫舍II| 337.打家劫舍III 今天就是打家劫舍的一天,这个系列不算难,大家可以一口气拿下。 198.打家劫舍 视频讲解:https://www.bilibili.com/video/BV1Te411N7SX https://programmercarl.c…

系统架构评估_2.SAAM方法

SAAM(Scenarios-based Architecture Analysis Method)是卡耐基梅隆大学软件工程研究所(SEI at CMU)的Kazman等人于1983年提出的一种非功能质量属性的架构分析方法,是最早形成文档并得到广泛使用的软件架构分析方法。最…

大语言模型上下文窗口初探(下)

由于篇幅原因,本文分为上下两篇,上篇主要讲解上下文窗口的概念、在LLM中的重要性,下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。 3、长文本是护城河吗? 毫无疑问,Kimi从一开始就用“长文本”占领…

电脑硬件 - 硬盘

硬盘是一台电脑的数据中心,存放着我们用户的所有文件和数据 对于一块硬盘,其重要指标:顺序读写能力,随机读写能力 顺序读写影响大文件的拷贝,随机读写影响大量小文件的拷贝(打开软件的快慢) 因…

揭秘Symfony DomCrawler库的爬虫魔力:获取网易新闻热点

在这个信息爆炸的时代,新闻热点不仅仅是传递信息的渠道,它们还能够影响和引导公众舆论。Symfony DomCrawler库作为一个强大的爬虫工具,可以帮助我们理解这种现象,通过获取和分析网易新闻热点,我们可以洞察舆情的走向。…

系统监测工具-tcpdump的使用

一个简单的tcpdump抓包过程。主要抓包观察三次握手,四次挥手的数据包 有两个程序:客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等,dstip地址端口指定抓取目的地址…

【SpringBoot整合系列】SpringBoot整合FastDFS(二)

目录 SpringBoot整合FastDFSJava客户端/依赖常用api接口解释1.uploadFile参数返回值 2.uploadSlaveFile参数返回值 3.getMetadata参数返回值 4.overwriteMetadata参数:返回值:无 5.mergeMetadata参数:返回值:无 6.queryFileInfo参…

Nacos Namespace 未授权访问漏洞

Nacos Namespace 未授权访问漏洞 问题 nacos 源码启动,发现即使开启了鉴权:nacos.core.auth.enabledtrue,未登录情况下,命名空间列表接口仍旧能查询到数据 鉴权逻辑 通过**AuthFilter **进行权限校验判断方法上是否存在注解 …

idea开发 java web 疫情信息查询系统bootstrap框架web结构java编程计算机网页接口查询

一、源码特点 java 疫情信息查询系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 前段主要技术 css j…

深入理解GO语言——GC垃圾回收二

文章目录 前言一、Go V1.5的三色并发标记法总结 前言 书接上回,无论怎么优化,Go V1.3都面临这个一个重要问题,就是mark-and-sweep 算法会暂停整个程序 。 Go是如何面对并这个问题的呢?接下来G V1.5版本 就用 三色并发标记法 来优…

python开发poc2,爆破脚本

#本课知识点和目的: ---协议模块使用,Request 爬虫技术,简易多线程技术,编码技术,Bypass 后门技术 下载ftp服务器模拟器 https://lcba.lanzouy.com/iAMePxl378h 随便创建一个账户,然后登录进去把ip改成…

战争中的AI应用:道德、伦理与技术的交织

AI在战争中的应用是一个极具争议和复杂的话题,无法简单地回答是好还是坏。其影响取决于多个因素,包括使用方式、目的、伦理框架以及技术本身的发展水平。 一方面,AI在战争中具有潜在的积极作用。它可以提高军事行动的效率和精确性&#xff0c…

【MySQL】游标和触发器

一、游标 1.1 什么是游标 1、使用背景 在我们使用update或者delete操作数据时,一般都会根据条件语句查询出很多条记录组成的数据集,然后一次性批量操作 假设我们想要对这个结果集中的数据 一行一行的进行操作,比如某个条件满足后&#xff…

计算机毕业设计java 基于Android的拼图游戏app

当今社会,随着电子信息技术的发展,电子游戏也成为人们日常生活的一部分。这种娱乐方式结合了日新月异的技术,在游戏软件中结合了多种复杂技术。拼图游戏流行在各种电子产品上,从计算机,掌上游戏机到如今的手机&#xf…

Vue中的键盘事件

目 录 1. 概述 2. JavaScript 键盘事件 2.1 键盘事件类型 2.1.1 keydown 事件2.1.2 keypress 事件2.1.3 keyup 事件2.1.4 input 事件 2.2 键盘事件的响应顺序 3. Vue 键盘事件监听与处理 3.1 获取按键的 键码(keyCode)3.2 监听按键事件 4. Vue 按键…

【C++】继承总结

一、前言 我们众所周知的C三大特性分别为:封装、继承、多态。 封装就是将接口实现统一化,隐藏那些不同的地方,在上层函数调用体现的方式一样,如各种容器的迭代器iterator,尽管底层实现的方式不同,但是在使用…

2024免费Mac电脑用户的系统清理和优化软件CleanMyMac

作为产品营销专家,对于各类产品的特性与优势有着深入的了解。CleanMyMac是一款针对Mac电脑用户的系统清理和优化软件,旨在帮助用户轻松管理、优化和保护Mac电脑。以下是关于CleanMyMac的详细介绍: CleanMyMac X2024全新版下载如下: https://…

ctfshow web入门 文件包含 web151--web161

web151 打算用bp改文件形式(可能没操作好)我重新试了一下抓不到 文件上传不成功 改网页前端 鼠标右键&#xff08;检查&#xff09;&#xff0c;把png改为php访问&#xff0c;执行命令 我上传的马是<?php eval($_POST[a]);?> 查看 web152 上传马 把Content-Type改为…