python中KFold函数是怎么划分数据的

文章详细介绍了K折交叉验证在Python中的应用,包括sklearn.KFold类的使用方法,如n_splits设置、shuffle选项(是否打乱数据顺序)和random_state对结果重复性的控制。通过实例展示了shuffle=False和shuffle=True以及设置random_state的效果。
摘要由CSDN通过智能技术生成

准备

准备了30条测试数据

【免费】这是一个简单的测试数据资源-CSDN文库

 

K折交叉验证原理 

就是把数据分成K份,其中K-1份用于训练集,剩余1份作为测试集,将这个过程重复K次,直到每份数据都能作为测试集,直观点就像下面的图:

 python中KFold参数解释

class sklearn.model_selection.KFold(n_splits=n, shuffle=False, random_state=None)
  • n_splits=n,将数据集划分n个互斥子集,每次用其中一个子集当作验证集,剩下的n_splits-1个作为训练集,进行n_splits次训练和测试,得到n_splits个结果
  • shuffle = False则不会对传入的训练集打乱,是按顺序进行划分的,每次运行代码得到的划分结果一样
  • shuffle = True则对传入的数据集打乱,随机划分n_splits组数据。常与random_state配合使用,以保存重复运行代码得到的随机划分一致
  • 函数的用法是fold = KFold(参数设置);fold.split(data。返回值是train和test的索引

shuffle = False(默认情况):

import pandas as pd 
from sklearn.model_selection import KFold #导入交叉验证模
df = pd.read_excel('test.xlsx', header=None)
kf = KFold(n_splits=5,shuffle =False)

i=1
for train_i,test_i in kf.split(df):
    print(f'--------------------------第{i}折------------------------------')
    print(train_i,test_i)
    #print(df.loc[train_i])
   #print(df.loc[train_i])
    i+=1

每次结果相同,结果是这样的(返回的是dataframe的行索引,要想看到数据,就用df.loc[train_i]),说明KFold划分数据集就是按照“从前往后作为测试集”的这种顺序依次将所有K份数据都作为测试集。

 shuffle = True:

kf = KFold(n_splits=5, shuffle=True)
for i in kf.split(df):
    print(i)

每次结果不同,对传入的数据集打乱,随机划分n_splits组数据

 shuffle = True,random_seed = 42:

kf = KFold(n_splits=5, shuffle=True, random_state=42)
for i in kf.split(df):
    print(i)

每次结果相同,尽管对传入的数据集随机打乱,但是固定了随机种子,所以每次结果相同

 

参考

sklearn.KFold用法示例_kfold返回值_popo-shuyaosong的博客-CSDN博客 

 Python sklearn的KFold使用_python kfold_早起CaiCai的博客-CSDN博客

 文章中图片来源:

【机器学习】Cross-Validation(交叉验证)详解 - 知乎 (zhihu.com)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值