image-processing - 如何使用 sklearn 将数据集拆分为训练和测试数据
问题描述
我正在使用 at&t faces 数据集,一个主目录包含 40 个子目录,每个子目录包含特定人的不同图像。我创建了一个包含子目录名称的列表。我想用这些数据来训练一个神经网络,所以我想把数据分成 80% 的训练和 20% 的测试。这是我到目前为止所做的:
import os
import cv2
path = r"C:\Users\Desktop\att_faces"
directory = []
directory = [x[1] for x in os.walk(path)]
non_empty_dirs = [x for x in directory if x]
directory = [item for subitem in non_empty_dirs for item in subitem]
这一步之后我应该如何进行?
解决方案
您希望将数据拆分为训练集和测试集。为此,您可以
手动或使用脚本单独训练和测试文件夹,并在数据生成器的帮助下加载它们进行训练。
加载整个数据并将它们拆分以在内存中进行训练和测试。
让我们讨论第二个选项。
主目录包含40个子目录
假设您的主目录是Train//
并且有40
子文件夹即1-40
. 另外,我假设类标签是文件夹名称。
# imports
import cv2
import numpy as np
import os
from sklearn.model_selection import train_test_split
# seed for reproducibility
SEED = 44000
# lists to store data
data = []
label = []
# folder where data is placed
BASE_FOLDER = 'Train//'
folders = os.listdir(BASE_FOLDER)
# loading data to lists
for folder in folders:
for file in os.listdir(BASE_FOLDER + folder + '//'):
img = cv2.imread(BASE_FOLDER + folder + '//' + file)
# do any pre-processing if needed like resize, sharpen etc.
data = data.append(img)
label = label.append(folder)
# now split the data in to train and test with the help of train_test_split
train_data, test_data, train_label, test_label = train_test_split(data, label, test_size=0.2, random_state=SEED)
推荐阅读
- android - 进行验证以从数据库中过滤活动/非活动手机号码
- java - 为什么 Apache Commons 库验证器是可序列化的?
- php - PHP 表单给出错误
- android - 用户在Goodie Bag PinviewEditText中完成编辑后如何自动关闭键盘?
- python - 如何在 django 用户模型中添加新字段
- php - wordpress WP_Query 类的“orderby”或“order”参数的条件
- react-native - 导航选项 headerLeft、headerRight 和标题不起作用?
- python - 如何使用 Pandas Groupby 加速 Dash 应用程序
- javascript - 如何在网页加载时自动按 Tab 键
- c - 在嵌入式寄存器结构中用位移位替换位域