最近因为自己的疏忽,出现了一个比较严重的问题,让我查了好几天,最后才发现问题,原来主要问题我用了random.shuffle,强力建议大家以后少用random.shuffle,尽量用numpy.random.shuffle。
我本来是想把训练样本打乱,然后划分测试集和训练集,我用了random.shuffle,结果杯具了,分类效果非常好,好的我无法相信,最后我反复排查,原来是用random.shuffle打散出了问题。我做了个实验:
a = np.arange(1,10).reshape(-1,3)
b = a.copy()
print (a)
random.shuffle(a)
print('=========')
print(a)
print('========')
np.random.shuffle(b)
print(b)
输出结果为:
[[1 2 3]
[4 5 6]
[7 8 9]]
=========
[[1 2 3]
[4 5 6]
[4 5 6]]
========
[[4 5 6]
[1 2 3]
[7 8 9]]
所以,我打散后很多训练集和验证集是重复的,怪不得分类效果那么好,真想不通为什么random包里面的shuffle结果这样,一直以为它和numpy.random效果一样呢。random.shuffle对一维数组或者二维list没有问题,但是对二维数组,结果并不是我们预期。