有时候进行十次十折数据分块实现交叉验证的时候需要每一折的训练测试集。写了个小函数,用的时候直接for循环调用就行。
import numpy as np # 导入numpy包
from sklearn.model_selection import KFold # 从sklearn导入KFold包
#输入数据推荐使用numpy数组,使用list格式输入会报错
def K_Flod_spilt(K,fold,data,label):
'''
:param K: 要把数据集分成的份数。如十次十折取K=10
:param fold: 要取第几折的数据。如要取第5折则 flod=5
:param data: 需要分块的数据
:param label: 对应的需要分块标签
:return: 对应折的训练集、测试集和对应的标签
'''
split_list = []
kf = KFold(n_splits=K)
for train, test in kf.split(data):
split_list.append(train.tolist())
split_list.append(test.tolist())
train,test=split_list[2 * fold],split_list[2 * fold + 1]
return data[train], data[test], label[train], label[test] #已经分好块的数据集