数据的随机洗牌是所有机器学习管道中的标准程序,图像分类也不例外;其目的是打破数据准备过程中可能出现的偏差——例如首先将所有猫图像,然后将狗图像放入猫/狗分类数据集中。
以著名的鸢尾花数据集为例:
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
y
# result:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
您可以清楚地看到,数据集的准备方式是,前 50 个样本都是标签 0,接下来的 50 个样本都是标签 1,最后 50 个样本都是标签 2。尝试在这样的数据集中执行 5 折交叉验证而不进行改组,你会发现大部分折叠只包含一个标签;尝试 3 折简历,所有您的折页将只包含一个标签。 不好...顺便说一句,这不仅仅是理论上的可能性,它有actually happened。
即使不存在这样的偏见,洗牌永远不会伤害,所以我们总是这样做只是为了安全起见(你永远不知道......)。
根据我之前的经验,它导致验证损失低于训练损失,验证准确度高于训练准确度。 Check this link.
正如那里的答案所述,这极不可能是由于洗牌造成的。数据洗牌并不是什么复杂的东西——本质上,它相当于洗牌;可能曾经发生过你坚持“更好”的洗牌,然后你最终拿到一手同花顺,但显然这不是因为牌的“更好”洗牌。