【机器学习】Stacking与K折交叉验证

其他机器学习系列文章见于专题:机器学习进阶之路——学习笔记整理,欢迎大家关注。

1. Stacking定义

  Stacking并不是简单地对个体学习器的结果做简单逻辑处理,而是先从初始数据集训练出初级学习器,将初级学习器的输出当成特征,初始样本的标记仍被当作标记,由此生成一个新数据集用于训练学习器。

Stacking结构图

2. Stacking原理

  假设我们有两个初级学习器 M o d e l 1 Model1 Model1 M o d e l 2 Model2 Model2

  (1)对初级学习器 M o d e l 1 Model1 Model1,利用训练集 D D D进行训练,然后用训练好的 M o d e l 1 Model1 Model1预测训练集 D D D和测试集 T T T的标签列,结果分别为 P 1 P1 P1 T 1 T1 T1

  (2)对初级学习器 M o d e l 2 Model2 Model2,重复步骤(1),得到预测标签结果 P 2 P2 P2 T 2 T2 T2

  (3)将两个初级学习器的结果合并,得到次级学习器 M o d e l 3 Model3 Model3的训练集 P 3 = ( P 1 , P 2 ) P3=(P1, P2) P3=(P1,P2)和测试集 T 3 = ( T 1 , T 2 ) T3=(T1, T2) T3=(T1,T2)。也就是说,有多少个初级学习器,次级学习器的训练集和测试集就有多少列(特征)。

  (4)用 P 3 P3 P3训练次级学习器 M o d e l 3 Model3 Model3,并预测 T 3 T3 T3,得到最终的预测结果。

3. Stacking算法描述

  输入:训练集 D D D,初级学习算法 L 1 , L 2 , . . . , L T {\mathfrak{L}}_1,{\mathfrak{L}}_2,...,{\mathfrak{L}}_T L1,L2,...,LT,次级学习算法 L \mathfrak{L} L

  过程:

    (1)对 i = 1 , 2 , … , m {i = 1,2, \ldots ,m} i=1,2,,m,使用初级学习算法 L t \mathfrak{L}_t Lt产生初级学习器 h t = L t ( D ) h _ { t } = \mathfrak { L } _ { t } ( D ) ht=Lt(D);

    (2)生成次级训练集:

       D ′ = ∅ D ^ { \prime } = \emptyset D=

       f o r i = 1 , 2 , … , m d o {{for\quad }i = 1,2, \ldots ,m\quad do} fori=1,2,,mdo

         f o r t = 1 , 2 , … , T d o {{for\quad }t = 1,2, \ldots ,T\quad do} fort=1,2,,Tdo

           z i t = h t ( x i ) {{z_{it}} = {h_t}\left( {{x_i}} \right)} zit=ht(xi)

         e n d f o r {{ end\quad for}} endfor

         D ′ = D ′ ∪ ( ( z i 1 , z i 2 , … , z i T ) , y i ) {{D^\prime } = {D^\prime } \cup \left( {\left( {{z_{i1}},{z_{i2}}, \ldots ,{z_{iT}}} \right),{y_i}} \right)} D=D((zi1,zi2,,ziT),yi)

       e n d f o r {{ end\quad for}} endfor

    (3)在 D ′ {D'} D上用次级学习算法 L \mathfrak{L} L产生次级学习器 h ′ = L ( D ′ ) {h'} = {\mathfrak{L}}\left( {D'} \right) h=L(D)

  输出: H ( x ) = h ′ ( h 1 ( x ) , h 2 ( x ) , … , h T ( x ) ) H\left( x \right) = h'\left( {{h_1}\left( x \right),{h_2}\left( x \right), \ldots ,{h_T}\left( x \right)} \right) H(x)=h(h1(x),h2(x),,hT(x))

4. K折交叉验证

  但是,上述这种做法直接利用训练集训练得到的模型去预测训练集的标签,过拟合风险比较大。因此,一般通过k折交叉验证来缓解这种做法的过拟合问题。

Stacking的5折交叉验证流程图

  以5折交叉验证为例,做法如下:

  (1)原始训练集 D D D被随机划分5个大小相似的子集 D 1 , D 2 , … , D 5 {D_1},{D_2}, \ldots ,{D_5} D1,D2,,D5,令 D j D_j Dj D ‾ j = D \ D j {\overline D _j} = D\backslash {D_j} Dj=D\Dj分别表示第 j j j折的测试集和训练集。

  (2) D 1 D_1 D1训练 M o d e l 1 Model1 Model1,然后在 D 1 D_1 D1上进行预测得到 P 11 P_{11} P11;用 D 2 D_2 D2训练 M o d e l 1 Model1 Model1,然后在 D 2 D_2 D2上进行预测得到 P 12 {P_{12}} P12,重复5次将预测得到的 P 1 = ( P 11 ⋮ P 15 ) P 1 = \left( \begin{array} { c } { P _ { 11 } } \\ { \vdots } \\ { P _ { 15 } } \end{array} \right) P1=P11P15 P 1 P1 P1的训练集样本数等于原始训练集 D D D中的样本数。

  (3)在每次5折交叉验证中,都利用训练好的 M o d e l 1 Model1 Model1对整个测试集 T T T进行预测,然后将5次预测结果求平均得到 T 1 T1 T1

  (4)对初级学习器 M o d e l 2 Model2 Model2,重复步骤(2)(3),得到标签预测结果 P 2 P2 P2 T 2 T2 T2

  (5)拼接得到次级学习器 M o d e l 3 Model3 Model3的训练集 P 3 = ( P 1 , P 2 ) P3=(P1,P2) P3=(P1,P2)和测试集 T 3 = ( T 1 , T 2 ) T3=(T1,T2) T3=(T1,T2)

  (6)用 P 3 P3 P3训练次级学习器 M o d e l 3 Model3 Model3,并预测 T 3 T3 T3,得到最终的预测结果。

参考文献:

  1. 《机器学习》第八章集成学习——周志华
  2. Kaggle机器学习之模型融合(stacked)心得
  3. 【机器学习】模型融合方法概述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

K折交叉验证实现

K折交叉验证 k折交叉验证是划分数据集的一种方式,特别适合少量数据集 在原始数据中划分k份,取1份作为测试集,k-1份作为训练集 最后算出平均性能值 以MINIST数据为例子 python from tensorflow import keras import numpy as np import mat…

简述k折交叉验证法

1、以二分类任务为例,假定数据集D包含1000个样本,将其划分为训练集S和测试集T,其中S包含800个样本, T包含200个样本,用S进行训练后,如果模型在T上有50个样本分类错误,那么模型的正确率为75% 。 …

root 密码破解(rd.break)

在Linux系统中,忘记root密码时,可以用此方法进行暴力修改root密码 示例: 设置一个新的记不住的密码 $ echo cnakdnvf | passwd --stdin root $ poweroff 1.启动此虚拟机,选中以下行,并按 【 e 】进入内核编辑页面 …

k折交叉验证

一般情况将K折交叉验证用于模型调优,找到使得模型泛化性能最优的超参值。,找到后,在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价。 K折交叉验证使用了无重复抽样技术的好处:每次迭代过程中每个样…

Python连接达梦数据库

python如果想连接达梦数据库,必须要安装dmPython。 简介:dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。dmPython 实现这些 API,使 Python 应用程序能够对 DM 数据库进行访问。 dmPython 通…

Jenkins+Python自动化测试之持续集成详细教程

前言 今天呢笔者想和大家来聊聊JenkinsPython自动化测试持续集成,废话呢就不多说了哟咱们直接进入主题哟。 一、Jenkins安装 ​ Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供…

C++ 常用算数生成算法

&#x1f914;常用算数生成算法&#xff1a; 该算法函数需要调用<numeric>头文件 1.accumulate 计算总和 在 C STL 中&#xff0c;accumulate() 是一种常用的算法&#xff0c;用于计算指定范围内的元素之和。 accumulate() 的函数原型为&#xff1a; template<c…

Windows的Powershell终端增强

Ubuntu上一直用的Oh My Zsh强化终端&#xff0c;体验非常nice。最近在Win上做东西比较多&#xff0c;于是也想把Powershell这个简陋的终端加强一下。 说干就干&#xff0c;网上查了一圈&#xff0c;发现大部分人用Oh My Posh来操作&#xff0c;因此试了一下&#xff0c;发现卡…

python图像处理实战(一)—图像基础

&#x1f680;写在前面&#x1f680; &#x1f58a;个人主页&#xff1a;https://blog.csdn.net/m0_52051577?typeblog &#x1f381;欢迎各位大佬支持点赞收藏&#xff0c;三连必回&#xff01;&#xff01; &#x1f508;本人新开系列专栏—python图像处理 ❀愿每一个骤雨初…

MYSQL语句。

一些常用的操作内容&#xff0c;非常重要。首先从数据的增删改查谈起。 #增加一条数据 INSERT INTO studentdb.book(name, maker, price, num, time, autor) VALUES (Sping, 中国邮政, 500元, 456, 2021/11/30, spingsping) #查询表单结构 DESC book #查询表的内容 SELECT * FR…

MySQL语句的使用

目录 一&#xff0c;基本的增删改查 二&#xff0c;案例演示 三&#xff0c;排序拓展 1.拓展一 2. 拓展二 一&#xff0c;基本的增删改查 &#xff08;SQLServer与PLSQL的语句基本一致&#xff09; 提示&#xff1a;但是"" 在MySQL里面加号不做拼接&#xff0c…

chatgpt赋能python:Python中浮点数的定义

Python中浮点数的定义 什么是浮点数&#xff1f; 在计算机科学中&#xff0c;浮点数&#xff08;floating-point number&#xff09;是一种用于表示实数的近似值的数值类型。Python中的浮点数是由整数部分和小数部分组成的&#xff0c;可以使用小数点来表示。例如&#xff0c…

高级MySQL语句

高级MySQL语句 一、高级SQL语句 1、SELECT ----显示表格中一个或数个栏位的所有资料2、DISTINCT ----不显示重复的资料3、WHERE ----有条件查询4、AND OR ----且 或5、IN ----显示已知的值的资料6、BETWEEN ----显示两个值范围内的资料7、通配符 ----通常通配符都是跟 LIKE 一起…

MySQL语句优化

MySQL语句优化 1.通过EXPLAIN分析低效SQL的执行计划2.使用索引&#xff08;其下测试效率通过查询结果的type列的值进行评判&#xff09;1&#xff09;对于创建的多列索引&#xff0c;只要查询的条件中用到了最左边的列&#xff0c;索引一般就会被使用&#xff0c; 举例说明如下…

Mysql语句

查询 select 查询显示的列表 from 表名 select类似于&#xff1a; system.out.print(查询显示的列表), 特点: 1.查询列表可以是: 表中的字段,常量值,函数,表达式 2.查询出的表格是虚拟的表格(临时表格) 一基础查询 1.查询表中单个字段 date #1.查询表中单个字段 select us…

Mysql基本语句

1、数据库的基本类型 1.关系数据库 特点&#xff1a;以表和表的关联构成的数据结构 优点&#xff1a;能表达复杂的数据关系。强大的查询语言&#xff0c;能精确查找想要的数据 缺点&#xff1a;读写性能比较差&#xff0c;尤其是海量数据的读写。数据结构比较死板 用途&am…

MySQL的基本语句

目录 1.什么是数据库 2.数据库的操作 2.1.显示数据库 2.2.创建数据库 2.3.使用数据库 2.4.删除数据库 3.数据类型 3.1数值类型 3.2字符串类型 3.3日期类型 4.表的操作 4.1创建表 4.2往表中增加信息 5.删除表 1.什么是数据库 数据库大体可以分为关系型数据库和非关系…

MySQL 操作语句大全(详细)

sql语句总结 总结内容1. 基本概念2. SQL列的常用类型3. DDL简单操作3.1 数据库操作3.2 表操作 4. DML操作4.1 修改操作&#xff08;UPDATE SET&#xff09;4.2 插入操作&#xff08;INSERT INTO VALUE&#xff09;4.3 删除操作&#xff08;DELETE&#xff09; 5. DQL操作被操作…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

Chrome观看高分辨率60fps视频卡顿、丢帧问题的 问题记录

朋友的一台笔记本观看YouTube和哔哩哔哩的高分辨率视频卡成PPT 系统 是 win10企业版LTSC 版本号1809&#xff0c;使用的是Chrome浏览器 配置是i58250UhHD620,观看油管4k以上视频满负荷 安装WIN10的V9解码器. 安装V9解码器还是很卡顿&#xff0c;后来发现是谷歌浏览器的硬件加速…