原始数据存在一定的分布规律,所以学习曲线不平滑,如果数据量够大的话,打乱后会呈现随机分布,学习后更能体现样本的共性。为了加强模型的泛化能力,有时候需要打乱数据集(包括特征数据和标签),但是显然还是要保证每一条数据中的特征数据和标签的对应关系
可以进行如下操作:
1.通过随机化index
import random
index = [i for i in range(len(data))]
random.shuffle(index)
data = data[index]
label = label[index]
2.将数据集 特征数据和标签先整合成一个array再随机化行的顺序
s_data = np.array([data, labels])#假设data和labels均为二维数组
s_data = s_data.transpose(1,0,2)
np.random.shuffle(s_data)
data = s_data[:,0,:]
labels = s_data[:,1,:]
PS:numpy中函数shuffle与permutation都是对原来的数组随机打乱原来的顺序,shuffle中文含义为洗牌,permutation中文含义为排列,区别在于shuffle直接在原来的数组上进行操作,改变原来数组的顺序,无返回值。而permutation不直接在原来的数组上进行操作,而是返回一个新的打乱顺序的数组,并不改变原来的数组。
import numpy as np
a = np.arange(9)
print("a:",a)
np.random.shuffle(a)
print("a:",a)
b = np.random.permutation(a)
print("b:",b)
print("a:",a)
输出为:
a: [0 1 2 3 4 5 6 7 8]
a: [1 7 8 0 5 3 2 4 6]
b: [5 1 8 3 6 4 2 7 0]
a: [1 7 8 0 5 3 2 4 6]