首页 > 其他分享 >sklearn中的KFold简单介绍

sklearn中的KFold简单介绍

时间:2023-04-28 22:45:08浏览次数:27  
标签:训练 KFold Train 测试 简单 test sklearn

这一部分主要讲解关于什么是K-foldCV(K折交叉验证),简单的使用一些案例进行分析,然后使用sklearn库函数中一些简单的案例进行分析。

在机器学习中,多数最主要的功能函数被封装到sklearn的库函数中,model_selection类中包含了K-foldCV的简单使用,可以直接使用这个进行调用。

一.关于K-Fold的简单介绍

  交叉验证就是将得到的数据集样本进行不同程度的切分,从而组合得到不同的训练集和测试集,使用训练集来训练模型,用测试集来评估模型预测的好坏。

  交叉验证通过重复使用数据,更进一步验证数据的准确性,一般数据量不大的时候会被用来使用,防止过拟合。

  使用交叉验证进行多次切分,可得到多组不同的训练集和测试集,训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。

  目前交叉验证主要是一下几种:

  1.K-Fold Cross Valadation

  K折交叉验证会把样本数据随机的分成K份(一般是均分),每次随机的选择K-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择K-1份来训练数据。若干轮(小于K)之后,选择损失函数评估最优的模型和参数。

  将每个子集数据分别做一次测试集,其余的K-1组子集数据作为训练集,所以一般分成K份就这样会得到K组模型,用这K个模型最终的测试集的分类准确率的平均数作为此K-CV下分类器的性能指标。

  优点是可以降低由一次随机划分带来的偶然性,提高其泛化能力。但K折还有个问题就是因为是随机划分,很有可能划分的过程中刚好把类别都划分开了,比如第一折训练集里全是0标签,第二折测试集里全是1标签,这样对模型训练就不太好,在其中的某个模型学习的时候就没有学习到测试集的分类特征。在KFold中就是这样的,对于不平衡数据集,特别是一些比赛数据正类非常少,那么直接用KFold就可能出现这种问题。

  2.StratifiedKFold

  对非平衡数据可以用分层采样StratifiedKFold,就是在每一份子集中都保持和原始数据集相同的类别比例。若数据集有4个类别,比例是2:3:3:2,则划分后的样本比例约是2:3:3:2,StratifiedShuffleSplit() 划分中每个类的比例和完整数据集中的相同,若数据集有4个类别,比例是2:3:3:2,则划分后的样本比例也是2:3:3:2

二.代码示例

from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold

kfolder = KFold(n_splits=4,random_state=1)
for train, test in kfolder.split(X,y):
    print('Train: %s | test: %s' % (train, test),'\n')
>>>
Train: [2 3 4 5 6 7] | test: [0 1]
Train: [0 1 4 5 6 7] | test: [2 3]
Train: [0 1 2 3 6 7] | test: [4 5]
Train: [0 1 2 3 4 5] | test: [6 7]

folder = StratifiedKFold(n_splits=4,random_state=0)
for train, test in sfolder.split(X,y):
    print('Train: %s | test: %s' % (train, test))
>>>
Train: [1 3 4 5 6 7] | test: [0 2]
Train: [0 2 4 5 6 7] | test: [1 3]
Train: [0 1 2 3 5 7] | test: [4 6]
Train: [0 1 2 3 4 6] | test: [5 7]

 

标签:训练,KFold,Train,测试,简单,test,sklearn
From: https://www.cnblogs.com/mingtaozhou/p/17339148.html

相关文章

  • 简单控制的无限级菜单代码(ie)
    <style>.menu_right{position:absolute;display:none;border:1pxsolid#808080;color:black;background:#d4d0c8;font-size:13px;font-family:'宋体';padding:2px2px2px2px;top:3px;left:3px;}.menu_righta{white-space:......
  • [笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅
    国内视频地址:https://www.bilibili.com/video/BV17441137fa/?spm_id_from=333.880.my_history.page.click&vd_source=bda72e785d42f592b8a2dc6c2aad24091NLP基础1.1词的表示过程演进:one-hot编码词袋模型wordembedding1.2multiplesense1)明确两个概念:token和ty......
  • 超简单!Java 项目自动生成接口文档教程
    你还在用word、markdown埋头苦干写接口文档?写文档这件事恐怕是每个开发都万分抗拒的事情了。本篇文章详细教你如何利用插件工具,在IDEA中自动生成API文档。先来看看从IDEA中生成文档的效果如下图。下图是使用Apifox插件(Apifoxhelper)从IDEA生成的文档(右)效果。第一步......
  • Java 项目中一种简单的动态修改配置即时生效的方式 WatchService
    这种方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的。例如Springmvc以war包的形式部署,可以直接修改resources中的配置文件。如果是Springboot项目,还想用这种方式的话,就要引用一个外部可以编辑的文件,比如一个固定的目录,因为springboot大多......
  • Vue项目如何配置、切换主题颜色(mixin + scss方式,简单高效)
    Action一.首先,引入scss依赖(node-sass,sass-loader)npminstallnode-sasssass-loader--save-dev1二.项目样式文件目录介绍1.此处我将项目中的公共样式文件放到了src/style目录下,其中index.scss是以供全局使用的一些基本样式,在main.js文件中引入即可全局使用(图2)。_theme.scs......
  • 简单理解Collections.synchronizedList
    转:简单理解Collections.synchronizedListsynchronizedList中的listIterator和listIterator(intindex)方法并没有做同步处理,遍历的时候需要加锁 编译后的class   ......
  • Python-webdriver_manager的简单使用
     提前祝大家五一快乐(*^▽^*)前言:我们在使用Selenium做UI自动化时都需要手动去下载各个浏览器版本的webdriver,有时我们可能还会遇到跨操作系统去进行测试。以及有时因浏览器自动升级等原因,导致我们不得再去更新对应版本的webdriver。为了解决以上问题,webdriver-m......
  • 网页截图,html2canvas简单示例
     <divid="box"><p>asd4a5s6fa6s5f1asf</p><imgstyle="width:200px"src="xxxxxx.png"/><buttonstyle="width:100px;height:30px"onclick="prtsc()">pr......
  • 简单渗透测试流程
    获取授权1、信息收集nslookupwhois2、扫描漏洞namp=ip范围端口高级扫描3、漏洞利用4、提权(shell环境、桌面环境、最高权限)5、销毁记录6、留后门7、渗透测试报告手工测试端口号开放:telnetIP地址端口号445漏洞利用之IPC$:netusef:\\10.1.1.1\share密码/user:......
  • C语言结构体位域简单介绍
    目录0前言1结构体简单介绍2结构体的内存对齐3结构体位域历史文章0前言这几天看到一个有趣的结构体,之前没有见过,稍微了解了一下,顺便记录一下以下例子均在32位操作系统操作1结构体简单介绍在C语言中,每种类型的变量都会占用一定的字节数,以下面几种为例char1Bin......