机器学习数据集划分留出法,留一法,交叉法,自助法

实验一 模型评估方法-数据集划分

1.数据集划分方法

对于一个包含m个样例的数据集,划分训练集S和测试集T的方法有:留出法(hold-out)、交叉验证法(cross validation)、留一法(Leave-One-Out,LOO)和自助法(boostraping)。

1)留出法

留出法:直接将数据集D划分为两个互斥的集合,一个作为训练集S,另一个作为测试集 T,即 D=S∪T,S∩T=∅。

例如:数据集D中包含1000个样例,其中有500个正例和500个反例。我们可以使用 7:3 的比例将其划分为训练集S以及验证集T,这样S中有700个样本,T中有300个样本。在划分的过程中,要尽可能地保证S和T中的正例反例比例相同(也就是数据分布相同,可以使用分层抽样),例如S中700个样本有350个正例和350个反例,T中有150个正例和 150个反例,S和T中正反例的比例均为1:1。

说明:

(a)测试集合和训练集合尽可能保持数据分布的一致性,比如要保证正反样本的比例不变(这是一种导致过拟合的原因);

(b)在给定了训练/测试集合的样本比例之后,仍要存在多种的划分方式,对数据集合D进行分割(单次使用留出法结果往往不够稳定);

(c)训练/测试集合的大小比例问题;

测试集合过小,会导致测评结果的方差变大;

训练集合过小,会导致偏差过大,一般使用的都是2/3~4/5的样本用于训练;

2)交叉验证法(无放回的重采样)

交叉验证法:随机将样本拆分成K个互不相交大小相同的子集,然后用K-1个子集作为训练集训练模型,用剩余的子集测试模型,对K中选择重复进行,最终选出K次测评中的平均测试误差最小的模型。常用的k值有 5、10、20等。下图是10折交叉验证的示意图:

说明:

(a)假设我们确定了折数k,由于进行划分的方法不同,得到的结果也会不同(例如使用不同的随机数种子)。在实际使用中,我们可以进行 p次不同的k折交叉验证,取p*k 次实验结果的平均作为最终的实验结果,这叫做p次k折交叉验证。例如,10次10折交叉验证共进行了100次实验。
(b)与留出法类似,划分为S折存在多种方式,所以为了减小样本划分不同而引入的误差,通常随机使用不同的划分重复P次,即为P次S折交叉验证

3)留一法

留一法:可以看做是交叉验证法的一个特例。假设数据集 D中有 m 个样例,我们将其划分为 m 个互斥的集合进行交叉验证,这种交叉验证方法就被成为留一法。在留一法中,我们每次使用 m-1 个样例进行训练,1 个样例进行测试。这样用训练出的模型和直接使用全部数据集 D 训练出的模型非常接近,但当数据量比较大时,例如数据集包含 100 万个样例,使用留一法意味着我们要训练 100 万个模型,这显然是不现实的。

4)自助法

自助法:留出法每次从数据集 D 中抽取一个样本加入数据集 D′ 中,然后再将该样本放回到原数据集 D 中,即 D 中的样本可以被重复抽取。这样,D 中的一部分样本会被多次抽到,而另一部分样本从未被抽到。假设抽取 m 次,则在 m 次抽样中都没有被抽到的概率为 (1−1/m)m,取极限有:

也就是说,原数据集 D 中约 36.8% 的数据未在 D′ 中出现过,所以我们可以将 D′ 作为训练集,将 D−D′(D 与 D′ 的差集)作为测试集。

说明:自助法适用于数据集较小,难以划分训练、验证集的情况。

代码:自助法

#sklearn机器工具库的使用
#留出法hold_out 划分训练集和测试集
#1)待划分数据集为,2W规模的人脸图像,用不同文件夹分类放置,一类为'male',标签用1表示,另一类为'female',标签用0表示
#2)划分出进二分类训练和测试的数据集,并将划分的数据集存储到本地磁盘,文件名称分别为training.txt和testing.txt
import glob
import os.path
import random
import numpy as np

In [3]:

#图片数据集的根目录
ROOT_DIR='face_data\\'

In [4]:

#创建字典result,用于存放划分后的训练集和测试集
result={}

In [5]:

#获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),
#第一个元素表示ROOT_DIR当前目录,
#第二个元素表示当前目录下的所有子目录,
#第三个元素表示当前目录下的所有的文件
sub_dirs = [x[0] for x in os.walk(ROOT_DIR)]

In [6]:

sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别)
for sub_dir in sub_dirs[1:]:
获取当前目录下所有的有效图片文件
#创建image_list列表,用于存放图片
image_list=[]
os.path.basename(sub_dir)返回sub_sir最后的文件名
dir_name=os.path.basename(sub_dir)
通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串
label_name=dir_name.lower()
#数据集的中图片类型,已知:为Jpg格式
image_glob=os.path.join(ROOT_DIR,dir_name,'*.jpg')
image_list.extend(glob.glob(image_glob))
if not image_list:continue
获得数据集长度
images_length=len(image_list)
#创建index_label列表
index_label=[]
#根据文件类别,'male'用1表示,'female'用0表示
if label_name=='male':
for i in range(images_length):
index_label.insert(i,1)
elif label_name=='female':
for i in range(images_length):
index_label.insert(i,0)
#打印输出
print('类别',dir_name,'的图片数量为:',len(image_list))
#存储到字典中
result[label_name]={'imgs':image_list,'label':index_label}
类别 female 的图片数量为: 10038
类别 male 的图片数量为: 10190

In [7]:

imgs_list=result['male']['imgs']+result['female']['imgs']
imgs_label_list=result['male']['label']+result['female']['label']
#打印输出
print('数据集imgs_list图片的数量,总数为:',len(imgs_list))
数据集imgs_list图片的数量,总数为: 20228

In [8]:

#通过产生的随机数获得抽取样本的序号
round = 1#抽取轮数
bootstrapping_list = []#有重复
bootstrapping=[]#无重复
for j in range(round):
bootstrapping = []
for i in range(len(imgs_list)):
bootstrapping.append(int(np.floor(np.random.random()*len(imgs_list))))
bootstrapping_list.append(bootstrapping)
bootstrapping=list(set(bootstrapping))#去除相同的元素
bootstrapping2=[]#变成二维
bootstrapping2.append(bootstrapping)

In [10]:

#训练集存盘
for bootstrap in bootstrapping2:
fileTrain = open('sklearn_training_bootstrap'+'.txt', 'w')
for i in range(len(bootstrap)):
temp_data=imgs_list[bootstrap[i]]+'    '+str(imgs_label_list[bootstrap[i]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("抽取到的训练集数量为:%d"%(len(bootstrapping_list[0])))
抽取到的训练集数量为:20228
#测试集存盘
#计算测试集图片数据
list1 = list(range(0,20228))
list1_not_in_list2 = [i for i in list1 if i not in bootstrapping]#D−D′(D 与 D′ 的差集)
list1_not_in_list3=[]
list1_not_in_list3.append(list1_not_in_list2)#把一维的测试集转化成二维
for bootstrap in list1_not_in_list3:
fileTrain = open('sklearn_test_bootstrap'+'.txt', 'w')
for i in range(len(bootstrap)):
temp_data=imgs_list[bootstrap[i]]+'    '+str(imgs_label_list[bootstrap[i]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("剩下的测试集数量为:%d"%(len(list1_not_in_list3[0])))
剩下的测试集数量为:7435

交叉验证法:

#sklearn机器工具库的使用
#留出法hold_out 划分训练集和测试集
#1)待划分数据集为,2W规模的人脸图像,用不同文件夹分类放置,一类为'male',标签用1表示,另一类为'female',标签用0表示
#2)划分出进二分类训练和测试的数据集,并将划分的数据集存储到本地磁盘,文件名称分别为training.txt和testing.txt
import glob
import os.path
import random
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold

In [28]:

#图片数据集的根目录
ROOT_DIR='face_data\\'

In [29]:

#创建字典result,用于存放划分后的训练集和测试集
result={}

In [30]:

#获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),
#第一个元素表示ROOT_DIR当前目录,
#第二个元素表示当前目录下的所有子目录,
#第三个元素表示当前目录下的所有的文件
sub_dirs = [x[0] for x in os.walk(ROOT_DIR)]

In [31]:

#设置数据集划分比例,即训练集:测试集=4:1,训练集占数据集的80% 测试集占比则为20%
proportion=0.8

In [32]:

sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别)
for sub_dir in sub_dirs[1:]:
获取当前目录下所有的有效图片文件
#创建image_list列表,用于存放图片
image_list=[]
os.path.basename(sub_dir)返回sub_sir最后的文件名
dir_name=os.path.basename(sub_dir)
通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串
label_name=dir_name.lower()
#数据集的中图片类型,已知:为Jpg格式
image_glob=os.path.join(ROOT_DIR,dir_name,'*.jpg')
image_list.extend(glob.glob(image_glob))
if not image_list:continue
获得数据集长度
images_length=len(image_list)
#创建index_label列表
index_label=[]
#根据文件类别,'male'用1表示,'female'用0表示
if label_name=='male':
for i in range(images_length):
index_label.insert(i,1)
elif label_name=='female':
for i in range(images_length):
index_label.insert(i,0)
#打印输出
print('类别',dir_name,'的图片数量为:',len(image_list))
#存储到字典中
result[label_name]={'imgs':image_list,'label':index_label}
类别 female 的图片数量为: 10038
类别 male 的图片数量为: 10190

In [39]:

#从result字典中取出'male','female'两个类别的数据集放到列表imgs_list中
imgs_list=result['male']['imgs']+result['female']['imgs']
#从result字典中取出'male','female'两个类别的数据集放到列表imgs_label_list中
imgs_label_list=result['male']['label']+result['female']['label']
#打印输出
print('数据集imgs_list图片的数量,总数为:',len(imgs_list))
数据集imgs_list图片的数量,总数为: 20228

In [38]:

#说明:调用sklearn库API划分数据集
#imgs_training_list  训练集
#imgs_training_label_list 训练集标签
#index_testing_list 测试集
#index_testing_list 测试集标签
#参数test_size代表test集占据的比例  也可以指定train_size
#参数random_state用于分割的training和testing集合打乱的个数设定
#5折交叉验证 sklean库的方法帮我们分出了各个子训练集在总图集中的下标
#通过给出的子训练集下标找出对应的字段存入磁盘
#将总数据集平均分成了10份
count=1
imgs_split_list = []#用来存放训练集和测试集的下标
print('完成数据集划分,其中把数据集分成5份:')
kf = StratifiedKFold(n_splits=5)
for train , valid in kf.split(imgs_list,imgs_label_list):
print("第%d份训练集图片数量为:%d,测试集图片数量为:%d"%(count,len(train),len(valid)))
print((train,valid))
imgs_split_list.append((train,valid))
count+=1
完成数据集划分,其中把数据集分成5份:
第1份训练集图片数量为:16182,测试集图片数量为:4046
(array([ 2038,  2039,  2040, ..., 20225, 20226, 20227]), array([    0,     1,     2, ..., 12195, 12196, 12197]))
第2份训练集图片数量为:16182,测试集图片数量为:4046
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 2038,  2039,  2040, ..., 14203, 14204, 14205]))
第3份训练集图片数量为:16182,测试集图片数量为:4046
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 4076,  4077,  4078, ..., 16211, 16212, 16213]))
第4份训练集图片数量为:16183,测试集图片数量为:4045
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 6114,  6115,  6116, ..., 18218, 18219, 18220]))
第5份训练集图片数量为:16183,测试集图片数量为:4045
(array([    0,     1,     2, ..., 18218, 18219, 18220]), array([ 8152,  8153,  8154, ..., 20225, 20226, 20227]))

In [35]:

#5折5份训练集存盘
count = 1
for cross_list in imgs_split_list:
fileTrain = open('sklearn_training_cross_'+str(count)+'.txt', 'w')
cross_train_length = len(cross_list[0])
#通过for循环,将训练集图片路径,和标签组成字符串,存储到文件training.txt中
for ip in range(cross_train_length):
#使用str()内部函数,将标签的整型变量转变成字符串,并与训练集图片路径拼接
temp_data=imgs_list[cross_list[0][ip]]+'    '+str(imgs_label_list[cross_list[0][ip]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("成功保存训练集文件:{}".format('sklearn_training_cross_'+str(count)+'.txt'))
count+= 1
成功保存训练集文件:sklearn_training_cross_1.txt
成功保存训练集文件:sklearn_training_cross_2.txt
成功保存训练集文件:sklearn_training_cross_3.txt
成功保存训练集文件:sklearn_training_cross_4.txt
成功保存训练集文件:sklearn_training_cross_5.txt

In [36]:

#测试集存盘
#计算测试集图片数据
count = 1
for cross_list in imgs_split_list:
fileTrain = open('sklearn_testing_cross_'+str(count)+'.txt', 'w')
cross_test_length = len(cross_list[1])
#cross_List的0就是训练集,1是测试集
for ip in range(cross_test_length):
temp_data=imgs_list[cross_list[1][ip]]+'    '+str(imgs_label_list[cross_list[1][ip]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("成功保存训练集文件:{}".format('sklearn_training_cross_'+str(count)+'.txt'))
count+=1
成功保存训练集文件:sklearn_training_cross_1.txt
成功保存训练集文件:sklearn_training_cross_2.txt
成功保存训练集文件:sklearn_training_cross_3.txt
成功保存训练集文件:sklearn_training_cross_4.txt
成功保存训练集文件:sklearn_training_cross_5.txt

留一法:

#sklearn机器工具库的使用
#留出法hold_out 划分训练集和测试集
#1)待划分数据集为,2W规模的人脸图像,用不同文件夹分类放置,一类为'male',标签用1表示,另一类为'female',标签用0表示
#2)划分出进二分类训练和测试的数据集,并将划分的数据集存储到本地磁盘,文件名称分别为training.txt和testing.txt
import glob
import os.path
import random
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold

In [28]:

#图片数据集的根目录
ROOT_DIR='face_data\\'

In [29]:

#创建字典result,用于存放划分后的训练集和测试集
result={}

In [30]:

#获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),
#第一个元素表示ROOT_DIR当前目录,
#第二个元素表示当前目录下的所有子目录,
#第三个元素表示当前目录下的所有的文件
sub_dirs = [x[0] for x in os.walk(ROOT_DIR)]

In [31]:

#设置数据集划分比例,即训练集:测试集=4:1,训练集占数据集的80% 测试集占比则为20%
proportion=0.8

In [32]:

sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别)
for sub_dir in sub_dirs[1:]:
获取当前目录下所有的有效图片文件
#创建image_list列表,用于存放图片
image_list=[]
os.path.basename(sub_dir)返回sub_sir最后的文件名
dir_name=os.path.basename(sub_dir)
通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串
label_name=dir_name.lower()
#数据集的中图片类型,已知:为Jpg格式
image_glob=os.path.join(ROOT_DIR,dir_name,'*.jpg')
image_list.extend(glob.glob(image_glob))
if not image_list:continue
获得数据集长度
images_length=len(image_list)
#创建index_label列表
index_label=[]
#根据文件类别,'male'用1表示,'female'用0表示
if label_name=='male':
for i in range(images_length):
index_label.insert(i,1)
elif label_name=='female':
for i in range(images_length):
index_label.insert(i,0)
#打印输出
print('类别',dir_name,'的图片数量为:',len(image_list))
#存储到字典中
result[label_name]={'imgs':image_list,'label':index_label}
类别 female 的图片数量为: 10038
类别 male 的图片数量为: 10190

In [39]:

#从result字典中取出'male','female'两个类别的数据集放到列表imgs_list中
imgs_list=result['male']['imgs']+result['female']['imgs']
#从result字典中取出'male','female'两个类别的数据集放到列表imgs_label_list中
imgs_label_list=result['male']['label']+result['female']['label']
#打印输出
print('数据集imgs_list图片的数量,总数为:',len(imgs_list))
数据集imgs_list图片的数量,总数为: 20228

In [38]:

#说明:调用sklearn库API划分数据集
#imgs_training_list  训练集
#imgs_training_label_list 训练集标签
#index_testing_list 测试集
#index_testing_list 测试集标签
#参数test_size代表test集占据的比例  也可以指定train_size
#参数random_state用于分割的training和testing集合打乱的个数设定
#5折交叉验证 sklean库的方法帮我们分出了各个子训练集在总图集中的下标
#通过给出的子训练集下标找出对应的字段存入磁盘
#将总数据集平均分成了10份
count=1
imgs_split_list = []#用来存放训练集和测试集的下标
print('完成数据集划分,其中把数据集分成5份:')
kf = StratifiedKFold(n_splits=5)
for train , valid in kf.split(imgs_list,imgs_label_list):
print("第%d份训练集图片数量为:%d,测试集图片数量为:%d"%(count,len(train),len(valid)))
print((train,valid))
imgs_split_list.append((train,valid))
count+=1
完成数据集划分,其中把数据集分成5份:
第1份训练集图片数量为:16182,测试集图片数量为:4046
(array([ 2038,  2039,  2040, ..., 20225, 20226, 20227]), array([    0,     1,     2, ..., 12195, 12196, 12197]))
第2份训练集图片数量为:16182,测试集图片数量为:4046
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 2038,  2039,  2040, ..., 14203, 14204, 14205]))
第3份训练集图片数量为:16182,测试集图片数量为:4046
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 4076,  4077,  4078, ..., 16211, 16212, 16213]))
第4份训练集图片数量为:16183,测试集图片数量为:4045
(array([    0,     1,     2, ..., 20225, 20226, 20227]), array([ 6114,  6115,  6116, ..., 18218, 18219, 18220]))
第5份训练集图片数量为:16183,测试集图片数量为:4045
(array([    0,     1,     2, ..., 18218, 18219, 18220]), array([ 8152,  8153,  8154, ..., 20225, 20226, 20227]))

In [35]:

#5折5份训练集存盘
count = 1
for cross_list in imgs_split_list:
fileTrain = open('sklearn_training_cross_'+str(count)+'.txt', 'w')
cross_train_length = len(cross_list[0])
#通过for循环,将训练集图片路径,和标签组成字符串,存储到文件training.txt中
for ip in range(cross_train_length):
#使用str()内部函数,将标签的整型变量转变成字符串,并与训练集图片路径拼接
temp_data=imgs_list[cross_list[0][ip]]+'    '+str(imgs_label_list[cross_list[0][ip]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("成功保存训练集文件:{}".format('sklearn_training_cross_'+str(count)+'.txt'))
count+= 1
成功保存训练集文件:sklearn_training_cross_1.txt
成功保存训练集文件:sklearn_training_cross_2.txt
成功保存训练集文件:sklearn_training_cross_3.txt
成功保存训练集文件:sklearn_training_cross_4.txt
成功保存训练集文件:sklearn_training_cross_5.txt

In [36]:

#测试集存盘
#计算测试集图片数据
count = 1
for cross_list in imgs_split_list:
fileTrain = open('sklearn_testing_cross_'+str(count)+'.txt', 'w')
cross_test_length = len(cross_list[1])
#cross_List的0就是训练集,1是测试集
for ip in range(cross_test_length):
temp_data=imgs_list[cross_list[1][ip]]+'    '+str(imgs_label_list[cross_list[1][ip]])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
print("成功保存训练集文件:{}".format('sklearn_training_cross_'+str(count)+'.txt'))
count+=1
成功保存训练集文件:sklearn_training_cross_1.txt
成功保存训练集文件:sklearn_training_cross_2.txt
成功保存训练集文件:sklearn_training_cross_3.txt
成功保存训练集文件:sklearn_training_cross_4.txt
成功保存训练集文件:sklearn_training_cross_5.txt

流出法:

#sklearn机器工具库的使用
#留出法hold_out 划分训练集和测试集
#1)待划分数据集为,2W规模的人脸图像,用不同文件夹分类放置,一类为'male',标签用1表示,另一类为'female',标签用0表示
#2)划分出进二分类训练和测试的数据集,并将划分的数据集存储到本地磁盘,文件名称分别为training.txt和testing.txt
import glob
import os.path
import random
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

In [3]:

#图片数据集的根目录
ROOT_DIR='face_data\\'

In [4]:

#创建字典result,用于存放划分后的训练集和测试集
result={}

In [5]:

#获取当前目录下所有的子目录,这里x 是一个三元组(root,dirs,files),
#第一个元素表示ROOT_DIR当前目录,
#第二个元素表示当前目录下的所有子目录,
#第三个元素表示当前目录下的所有的文件
sub_dirs = [x[0] for x in os.walk(ROOT_DIR)]

In [6]:

#设置数据集划分比例,即训练集:测试集=4:1,训练集占数据集的80% 测试集占比则为20%
proportion=0.8

In [7]:

sub_dirs[0]表示当前文件夹本身的地址,不予考虑,只考虑他的子目录(各个类别)
for sub_dir in sub_dirs[1:]:
获取当前目录下所有的有效图片文件
#创建image_list列表,用于存放图片
image_list=[]
os.path.basename(sub_dir)返回sub_sir最后的文件名
dir_name=os.path.basename(sub_dir)
通过目录名获取类别的名称,返回将字符串中所有大写字符转换为小写后生成的字符串
label_name=dir_name.lower()
#数据集的中图片类型,已知:为Jpg格式
image_glob=os.path.join(ROOT_DIR,dir_name,'*.jpg')
image_list.extend(glob.glob(image_glob))
if not image_list:continue
获得数据集长度
images_length=len(image_list)
#创建index_label列表
index_label=[]
#根据文件类别,'male'用1表示,'female'用0表示
if label_name=='male':
for i in range(images_length):
index_label.insert(i,1)
elif label_name=='female':
for i in range(images_length):
index_label.insert(i,0)
#打印输出
print('类别',dir_name,'的图片数量为:',len(image_list))
#存储到字典中
result[label_name]={'imgs':image_list,'label':index_label}
类别 female 的图片数量为: 10038
类别 male 的图片数量为: 10190

In [8]:

#从result字典中取出'male','female'两个类别的数据集放到列表imgs_list中
imgs_list=result['male']['imgs']+result['female']['imgs']
#从result字典中取出'male','female'两个类别的数据集放到列表imgs_label_list中
imgs_label_list=result['male']['label']+result['female']['label']
#打印输出
print('数据集imgs_list图片的数量,总数为:',len(imgs_list))
数据集imgs_list图片的数量,总数为: 20228

In [11]:

#说明:调用sklearn库API划分数据集
#imgs_training_list  训练集
#imgs_training_label_list 训练集标签
#index_testing_list 测试集
#index_testing_list 测试集标签
#参数test_size代表test集占据的比例  也可以指定train_size
#参数random_state用于分割的training和testing集合打乱的个数设定
imgs_training_list,imgs_testing_list,imgs_training_label_list,index_testing_list=train_test_split(imgs_list,imgs_label_list, train_size=0.8, random_state=0)
#打印输出
print('完成数据集划分,其中:')
print('训练集名称为:imgs_training_list,图片数量为:',len(imgs_training_list))
print('测试集名称为:imgs_testing_list,图片数量为:',len(imgs_testing_list))
#训练集存盘
#计算训练集图片数据
imgs_training_length=len(imgs_training_list)
fileTrain = open('sklearn_training.txt', 'w')
#通过for循环,将训练集图片路径,和标签组成字符串,存储到文件training.txt中
for ip in range(imgs_training_length):
#使用str()内部函数,将标签的整型变量转变成字符串,并与训练集图片路径拼接
temp_data=imgs_training_list[ip]+'    '+str(imgs_training_label_list[ip])
fileTrain.write(temp_data)
fileTrain.write('\n')
fileTrain.close()
#打印输出
print('完成训练集存盘,文件名称为:sklearn_training.txt')
完成训练集存盘,文件名称为:sklearn_training.txt

In [22]:

#测试集存盘
#计算测试集图片数据
imgs_testing_length=len(imgs_testing_list)
fileTest = open('sklearn_testing.txt', 'w')
#通过for循环,将测试集图片路径,和标签组成字符串,存储到文件testing.txt中
for ip in range(imgs_testing_length):
#使用str()内部函数,将标签的整型变量转变成字符串,并与测试集图片路径拼接
temp_data=imgs_testing_list[ip]+'    '+str(index_testing_list[ip])
fileTest.write(temp_data)
fileTest.write('\n')
fileTest.close()
#打印输出
print('完成测试集存盘,文件名称为:sklearn_testing.txt')

Original: https://blog.csdn.net/weixin_47870618/article/details/123362892
Author: weixin_47870618
Title: 机器学习数据集划分留出法,留一法,交叉法,自助法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/618835/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球