训练集测试集拆分,K折交叉,mini-batch的实现

1 测试集和训练集的划分

我们需要从所有数据中额外取出一些数据来用作模型训练完成后的评估,所以需要训练集的测试集的划分

训练集和测试集的划分我们一般使用scikit-learn下的model_selection模块进行,代码如下

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

其中 X X X是data数据, y y y是标记数据,test_size是test数据所占比例,random_state是随机种子,能够保证你在对多组样本数量相同的数据拆分,相应的index可以对应

2 K折交叉

交叉验证

交叉验证我们使用的也是scikit-learn下的model_selection模块,主要是KFold类,使用方法如下

# K折交叉
from sklearn.model_selection import KFold

def kfold(X, y, n_splits):
	kf = KFold(n_splits=n_splits, shuffle=True, random_state=1)
    for train_index, test_index in kf.split(X, y):
        yield X[train_index], y[train_index], X[test_index], y[test_index]

以上代码会生成一个得到k折交叉的数据集的生成器,接下来只需要使用for循环来调取数据即可

for train_data, train_label, test_data, test_label in kfold(X, y, 10):
    pass

3 mini-batch

为了计算的效率,我们会把数据分解为多个batch,当模型遍历完一个batch才会更新一次参数。batch的划分可以通过手动完成,也可以通过其他工具完成,我们这里提供tensorflow和pytorch的batch划分方式

  • tensorflow:在tensorflow中我们使用tf.data.DataSet来进行分batch的操作
# X和y是读取的data和label
train_x = tf.placeholder(shape=data.shape, dtype=data.dtype)
train_y = tf.placeholder(shape=label.shape, dtype=label.dtype)

# 创建dataset
dataset = tf.data.DataSet.from_tensor_slices((train_x, train_y))
# 创建batch(打乱,分批,重复)
batch_size = 64
dataset = dataset.shuffle(2).batch(batch_size).repeat()
iterator = dataset.make_initializable_iterator()
next_batch = iterator.get_next()

# ...此处省略你的其他处理
with tf.Session() as tf:
    sess.run(iterator.initializer, feed_dict={train_x:X, train_y:y})
    x_batch, y_batch = sess.run(next_batch)
    # ...此处省略训练

具体操作见文档

  • pytorch:pytorch对batch的实现比tensorflow简单很多
from torch.utils import data
batch_size = 64
dataset = data.TensorDataset(X, y)
data_iter = data.DataLoader(dataset, batch_size, shuffle=True)
# 这个实际上是定义了一个生成器
# ...此处省略其他处理
for x_batch, y_batch in data_iter:
    # ...此处省略训练

具体见文档

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值