准备
准备了30条测试数据
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博客
文章中图片来源: