在深度学习中,我们对数据集进行处理,放到神经网络之前,往往需要先打乱数据集,如果数据集是ndarray(numpy)数据,属性(features)和标签(labels)在同一个array的话,也就是labels是在数据的最后一个维度,前几个维度均为数据的属性,这样我们可以通过numpy来打乱数据集。
代码如下:
import numpy as np
dataset = np.load(filename)
np.random.shuffle(dataset)
features = dataset[:,:-1]
labels = dataset[:,-1]
注意这里的np.random.shuffle() 是没有返回值的。加入代码是dataset = np.random.shuffle(dataset)
,代码是会报错的。
如果features 和labels是分开的ndarray,那么可以使用一下代码来打乱数据集。
import random
random_index = random.sample(list(range(dataset.shape[0])),dataset.shape[0])
train_size = int(dataset.shape[0] * 0.6)
train_index = random_index[:train_size]
test_index = [i for i in train_index if i not in train_index]
train_features = features[train_index]
test_labels = labels[test_index]
test_features = features[test_index]
test_labels = labels[test_index]
注意这里的random.sample 采样的数据必须是list格式的。可以注意到在得到test_index的方法中,我使用了表达式的方法得到train_index的补集。这样求补集的方法在数据量小的时候还能凑活用,但是数据量大的话迭代判断会非常慢。用下面的方法可以快速求得train_index的补集。
test_index = list(set(random_index).difference(set(train_index)))
这种方法速度狂快无比,哈哈哈。。。。。。。。。。。。。。