原始數據存在一定的分布規律,所以學習曲線不平滑,如果數據量夠大的話,打亂后會呈現隨機分布,學習后更能體現樣本的共性。為了加強模型的泛化能力,有時候需要打亂數據集(包括特征數據和標簽),但是顯然還是要保證每一條數據中的特征數據和標簽的對應關系
可以進行如下操作:
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]