python中的StratifiedKFold
文章目录
- 1. KFold
- 2. StratifiedKFold
- 3. generator
- 4. 建模中的应用
1. KFold
首先要搞清楚,KFold是用于生成交叉验证
的数据集的,而StratifiedKFold则是在KFold的基础上,加入了分层抽样
的思想,使得测试集和训练集有相同的数据分布,因此表现在算法上,StratifiedKFold需要同时输入数据和标签
,便于统一训练集和测试集的分布
- 概念
- 将数据K等分,依次选择其中一份作为测试集,其余k-1份作为训练集
X=np.array([[1,2,3,4],[11,12,13,14],[21,22,23,24],[31,32,33,34],[41,42,43,44],[51,52,53,54],[61,62,63,64],[71,72,73,74]
])y=np.array([1,1,0,0,1,1,0,0])from sklearn.model_selection import StratifiedKFold,KFold
kf=Kfold(n_splits=4)
kf.split(X) !注意这个地方
2. StratifiedKFold
基本代码和KFold相似。
(1) 首先创建一个对象
(2) 然后带入数据进行数据分割
(3) 读取分割后的数据,读取后每个变量形式表现为数组
,整个分隔的函数.split得出的则是一个生成器
我主要卡在了不清楚
(1) 分隔时skf.split(X,y)的输出到底是个什么东西,
(2) 为什么可以用for循环去读取。
于是查了些资料发现是自己对生成器的了解不够
sfolder = StratifiedKFold(n_splits=4,random_state=0)
for train, test in sfolder.split(X,y):print('Train: %s | test: %s' % (train, test))
3. generator
感谢python中的生成器(generator)总结
首要印象
python中的generator保存的是算法
,不会输出结果,是一种惰性计算
,即只有真正需要计算出值的时候才会往下计算生成generator
(1) 将生成列表的[]改成()(2) 在函数中使用
yield
关键字。
函数里有了yield之后,每次执行到yield就会停止
,下一次直接从停止的地方继续计算。因此即使生成器是无限循环也没有关系,因为生成器本身并不计算结果,只是保存算法。
#(1)将生成列表的[]改成()
t=(x for x in range(10))
t
输出:<generator object <genexpr> at 0x000001D6C12602E0>#(2) 在函数中使用yield关键字
def fib():a=[1,2]b=[3,4]while a[1]<100:yield a,ba=[i+7 for i in a]b=[i+1 for i in b]f = fib()
for i,j in f:print(i,j)
generator中的for循环
对于generator可以采用next()方法
进行逐条读取,但一般for循环更为常见通常采用
for循环遍历一个generator
,其实for循环的内部实现就是不停调用next()
。优点
- (1) 生成器可以
避免不必要的计算
,带来性能上的提升 - (2) 而且会
节约空间
,可以实现无限循环(无穷大的)的数据结构。
- (1) 生成器可以
4. 建模中的应用
生成交叉验证数据集,其中skf.split(X,y)返回的是训练集和测试集的索引值
skf=StratifiedKFold(n_splits=3,random_state=1) for train_index,test_index in skf.split(X,y):X_train,X_test=X[train_index],X[test_index]y_train,y_test=y[train_index],y[test_index]
python中的StratifiedKFold相关推荐
- Python中的KFold与StratifiedKFold
skearn做数据集的处理需要用到这两个比较重要的函数:KFold与StratifiedKFold,作用是在机器学习中进行交叉验证来使用. 这两个函数都是sklearn模块中的,在应用之前应该导入: ...
- 如何在 Python 中开始机器学习?(小白必看)
其实学习机器学习的最好方法是设计和完成小项目. Python 是一种流行且功能强大的解释型语言.与 R 不同,Python 是一种完整的语言和平台,可用于研究和开发以及开发生产系统. 还有很多模块和库 ...
- [转载]Scikit Learn: 在python中机器学习
原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...
- 如何优雅的在python中暂停死循环?
死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...
- 关于python中的dict和defaultdict
dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...
- python中的新式类与旧式类的一些基于descriptor的概念(上)
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- Python中正则表达式用法 重点格式以这个为准_首看_各种问题
20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...
- 逗号分隔的字符串转换为Python中的列表 split
将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...
最新文章
- python编程语言能干什么-编程语言Python,可以用来干什么
- Java OR Android
- 转载【IDEA】向IntelliJ IDEA创建的项目导入Jar包的两种方式
- 探秘大型B2C网站如何实现高性能可伸缩架构技术
- ”盒模型“之如何防止边框和内边距把元素撑开
- 计算机网络基础:TCP/IP协议相关知识笔记​
- cad与连接mySQL数据库_跨服务器操作数据库?其实很简单!(下)
- 用electron写桌面应用
- Symfony 4.2.4 和 3.4.23 发布,经典 PHP Web 开发框架
- python文件、存储、压缩
- scp实现mac与linux服务器之间文件传输
- 无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域。...
- 开源的shell工具finalShell
- 【Linux】Ubuntu18.04深度学习环境配置+Google+TIM+搜狗输入法等安装方法
- Python+Selenium程序执行完,chrome浏览器自动关闭解决方案
- HR面试问题总结(HR面经)
- ROS机器人的远程启动和控制过程
- python小白系列2
- Navicate管理工具的使用
- 简单理解什么是虚拟存储器
热门文章
- 既约分数(辗转相除法)蓝桥杯
- Cadence Allegro 17.4学习记录开始25-PCB Editor 17.4软件PCB中布线操作基础
- uniapp运行到IOS真机提示 错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配
- 「制作U盘系统」”安装 Linux Ubuntu系统到移动硬盘“教程
- 如何让火狐浏览器开启夜间模式
- 读书笔记:英语词根学习
- ElasticSearch——倒排索引和正向索引
- 04 Rabbits and Recurrence Relations
- jQuery 输入框的onblur事件
- 二次剪辑视频怎么做成原创,二次剪辑视频过原创免费教程