模型融合之模型堆叠

一、理论

模型堆叠(Model Stacking)是一种集成学习的方法,其本质是将多个基学习器(Individual Learner)的预测结果作为新的特征,再训练一个元学习器(Meta Learner)来进行最终的预测。每个基学习器可以使用不同的算法或参数来训练,因此理论上你可以将任何可以输出概率值的模型作为基学习器进行模型堆叠

StackingClassifier应用于分类问题,StackingRegressor应用于回归问题。

level 0上训练的多个强学习器被称为基学习器(base-model),也叫做个体学习器。在level 1上训练的学习器叫元学习器(meta-model)。根据行业惯例,level 0上的学习器是复杂度高、学习能力强的学习器,例如集成算法、支持向量机,而level 1上的学习器是可解释性强、较为简单的学习器,如决策树、线性回归、逻辑回归等。有这样的要求是因为level 0上的算法们的职责是找出原始数据与标签的关系、即建立原始数据与标签之间的假设,因此需要强大的学习能力。但level 1上的算法的职责是融合个体学习器做出的假设、并最终输出融合模型的结果,相当于在寻找“最佳融合规则”,而非直接建立原始数据与标签之间的假设。

二、实例 

# 常用工具库
import re
import numpy as np
import pandas as pd
import matplotlib as mlp
import matplotlib.pyplot as plt
import time# 算法辅助 & 数据
import sklearn
from sklearn.model_selection import KFold, cross_validate
from sklearn.datasets import load_digits  # 分类 - 手写数字数据集
from sklearn.datasets import load_iris
#from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split# 算法(单一学习器)
from sklearn.neighbors import KNeighborsClassifier as KNNC
from sklearn.neighbors import KNeighborsRegressor as KNNR
from sklearn.tree import DecisionTreeRegressor as DTR
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.linear_model import LinearRegression as LR
from sklearn.linear_model import LogisticRegression as LogiR
from sklearn.ensemble import RandomForestRegressor as RFR
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.ensemble import GradientBoostingRegressor as GBR
from sklearn.ensemble import GradientBoostingClassifier as GBC
from sklearn.naive_bayes import GaussianNB
import xgboost as xgb# 融合模型
from sklearn.ensemble import StackingClassifierdata = load_digits()
X = data.data  #(1797, 64),代表了1797个样本,每个样本有64个特征,这对应了8x8像素的图片
y = data.target #一维数组,其维度为 (1797,),包含了对应图片的真实数字标签(0-9)# 划分数据集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.2, random_state=1412)def fusion_estimators(clf):"""对融合模型做交叉验证,对融合模型的表现进行评估"""cv = KFold(n_splits=5, shuffle=True, random_state=1412)results = cross_validate(clf, Xtrain, Ytrain , cv=cv , scoring="accuracy", n_jobs=-1, return_train_score=True, verbose=False)test = clf.fit(Xtrain, Ytrain).score(Xtest, Ytest)print("train_score:{}".format(results["train_score"].mean()), "\n cv_mean:{}".format(results["test_score"].mean()), "\n test_score:{}".format(test))def individual_estimators(estimators):"""对模型融合中每个评估器做交叉验证,对单一评估器的表现进行评估"""for estimator in estimators:cv = KFold(n_splits=5, shuffle=True, random_state=1412) #创建了一个5折交叉验证的KFold对象cvresults = cross_validate(estimator[1], Xtrain, Ytrain, cv=cv , scoring="accuracy", n_jobs=-1, return_train_score=True, verbose=False)test = estimator[1].fit(Xtrain, Ytrain).score(Xtest, Ytest)print(estimator[0], "\n train_score:{}".format(results["train_score"].mean()) #训练集得分的平均值, "\n cv_mean:{}".format(results["test_score"].mean())      #交叉验证得分的平均值, "\n test_score:{}".format(test), "\n")                    #测试集得分# estimator包含2个元素的元组('Logistic Regression', LogisticRegression(C=0.1, max_iter=3000, n_jobs=8, random_state=1412))# 逻辑回归没有增加多样性的选项
clf1 = LogiR(max_iter=3000, C=0.1, random_state=1412, n_jobs=8)
# 增加特征多样性与样本多样性
clf2 = RFC(n_estimators=100, max_features="sqrt", max_samples=0.9, random_state=1412, n_jobs=8)
# 特征多样性,稍微上调特征数量
clf3 = GBC(n_estimators=100, max_features=16, random_state=1412)# 增加算法多样性,新增决策树与KNN
clf4 = DTC(max_depth=8, random_state=1412)
clf5 = KNNC(n_neighbors=10, n_jobs=8)
clf6 = GaussianNB()# 新增随机多样性,相同的算法更换随机数种子
clf7 = RFC(n_estimators=100, max_features="sqrt", max_samples=0.9, random_state=4869, n_jobs=8)
clf8 = GBC(n_estimators=100, max_features=16, random_state=4869)estimators = [("Logistic Regression", clf1), ("RandomForest", clf2), ("GBDT", clf3), ("Decision Tree", clf4), ("KNN", clf5)# , ("Bayes",clf6), ("RandomForest2", clf7), ("GBDT2", clf8)]#选择单个评估器中分数最高的随机森林作为元学习器
#也可以尝试其他更简单的学习器
final_estimator = RFC(n_estimators=100, min_impurity_decrease=0.0025, random_state= 420, n_jobs=8)
clf = StackingClassifier(estimators=estimators #level0的7个体学习器,final_estimator=final_estimator #level 1的元学习器,n_jobs=8)
fusion_estimators(clf)
individual_estimators(estimators)

结果:

参考链接:https://blog.csdn.net/weixin_46803857/article/details/128700297 

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

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

相关文章

【JUC的四大同步辅助类】

文章目录 一、CountDownLatch二、CyclicBarrier三、Semaphore四、Phaser 提示:以下是本篇文章正文内容,下面案例可供参考 一、CountDownLatch CountDownLatch如同火箭发射,计数只能不断减减,当到达0时即发射 场景示例&#xff1…

案例089:基于微信小程序的校园综合服务平台设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

ALSA学习(5)——ASoC架构中的Machine

参考博客:https://blog.csdn.net/DroidPhone/article/details/7231605 (以下内容皆为原博客转载) 文章目录 一、注册Platform Device二、注册Platform Driver三、初始化入口soc_probe() 一、注册Platform Device ASoC把声卡注册为Platform …

Typora+PicGo+Gitee构建云存储图片

创建Gitee仓库 首先,打开工作台 - Gitee.com,自行注册一个账户 注册完后,新建一个仓库(记得仓库要开源) 然后创建完仓库后,鼠标移动到右上角头像位置,选择设置,并点击&#xff…

终于学会听英文歌了:A Sad Me In Your Eyes

A Sad Me In Your Eyes 来源: https://lyricstranslate.com/en/ln-party-sad-me-your-eyes-lyrics.html Fire can’t burn in my eyes If without your smile Snow can cover your smile If without your love When you think of me, I’ve gone too far I can’t …

了解OpenApi和Swagger

Swagger 和 OpenAPI 是一种用于描述 RESTful API 的规范和工具集合。在本文中,我们将探讨 Swagger 和 OpenAPI 的概念、作用、使用方法以及优缺点。 Swagger 和 OpenAPI 的概念 Swagger 是一种用于描述 RESTful API 的规范。它提供了一种简单的方式来描述 API 的请…

Python 热力图的绘制(Matplotlib篇-12)

Python 热力图的绘制(Matplotlib篇-12)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

如何做好档案数字化前的鉴定工作

要做好档案数字化前的鉴定工作,可以按照以下步骤进行: 1. 确定鉴定目标:明确要鉴定的档案的内容、数量和性质,确定鉴定的范围和目标。 2. 进行档案清点:对档案进行全面清点和登记,包括数量、种类、状况等信…

立体匹配算法(Stereo correspondence)

SGM(Semi-Global Matching)原理: SGM的原理在wiki百科和matlab官网上有比较详细的解释: wiki matlab 如果想完全了解原理还是建议看原论文 paper(我就不看了,懒癌犯了。) 优质论文解读和代码实现 一位大神自己用c实现…

如何在Windows安装Wnmp服务并实现固定地址远程访问

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包,安装完成后即可得到一个Nginx MyS…

程序员提问的艺术:28.4K Star指南,告别成为办公室讨厌鬼!

Github: https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way 原文:http://www.catb.org/~esr/faqs/smart-questions.html ✅为什么讨厌某些提问者 未自行尝试解决问题: ❌“怎么用Java写一个排序算法?” 👍&#…

计算机毕业设计 基于SpringBoot的工作量统计系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

IDEA断点调试

IDEA断点调试 断点调试是一种在程序执行过程中暂停执行并逐步检查代码状态的方法。它允许开发者在程序运行到特定位置时暂停执行,查看变量的值、执行过程和调用栈等信息,从而更好地理解代码的运行情况和解决问题。可以帮助我们查看java底层源代码的执行…

day 57 算法训练|动态规划part17

参考:代码随想录 647. 回文子串 1. dp数组(dp table)以及下标的含义 是不是能找到一种递归关系,也就是判断一个子字符串(字符串的下表范围[i,j])是否回文,依赖于,子字符串&#x…

Amos各版本安装指南

Amos下载链接 https://pan.baidu.com/s/1uyblN8Q-knNKkqQVlNnXTw?pwd0531 1.鼠标右击【Amos28】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Amos28】。 2.打开解压后的文件夹,鼠标右击【Amos28】选择【以管理员身份运行…

AUTOSAR软件架构描述文档,AUTOSAR_EXP_LayeredSoftwareArchitecture

AUTOSAR软件架构描述文档,我们常见的经典的CP架构及OS双核等架构描述 下载链接:https://www.autosar.org/fileadmin/standards/R21-11/CP/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

macos下php 5.6 7.0 7.4 8.0 8.3 8.4全版本PHP开发环境安装方法

在macos中如果使用brew 官方默认的core tap 只可以安装官方最新的稳定版PHP, 如果想要安装 php 5.6 或者 php 8.4版本的PHP就需要使用第三方的tap , 这里分享一个比较全面的brew tap shivammathur/php 这个tap里面包含了从php5.6到最新版php8.4的所有可用最新版本PHP, 而且是同…

IDEA设置新建类注释、手动注释详解

文章目录 一、背景二、模板三、设置方法1、新建类注释设置2、手动注释设置 一、背景 每次在一台新电脑安装idea,都需要重新设置idea注释配置,说常用吧,也就新安装时才用,时间久步骤容易忘记,所以用此文章记录一下。 二…

阿里云服务器系统盘高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘测评

阿里云服务器系统盘或数据盘支持多种云盘类型,如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等,阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

Mysql的基本用法(上)非常详细、快速上手

上篇结束了java基础,本篇主要对Mysql中的一些常用的方法进行了总结,主要对查询方法进行了讲解,包括重要的多表查询用到的内连接和外连接等,以下代码可以直接复制到可视化软件中,方便阅读以及练习; SELECT *…