机器学习为什么要打乱数据?


机器学习为什么要打乱数据?

打乱数据至少分两种情况:

第一种比较好理解也比较容易达成共识: 打乱全量数据,这样做 train/dev/test 测试的时候每一部分的数据比较有代表性(representativeness)。极端情况就是训练数据跟测试数据完全不一样,这样训练数据上学到的模型就很难用于预测测试数据了,所以需要避免这种情况。

第二种比较tricky和难回答的情况是:在确定train/test,train/dev/val 各部分数据都有代表性的情况下,为什么要强调训练数据内部必须是打乱的呢?一个极端的例子就是,全量数据打乱之后,做训练测试切分,切分完之后,把训练数据按照某顺序重新排列一下,再送进模型训练,这样可以吗?

个人觉得这应该是依算法而定的,比如就是一个逻辑回归模型预测房型,把打乱的训练数据按照真实房型排列送进模型训练,vs 保持打乱的状态送进模型训练,得到的模型有本质差别吗?刚用模拟数据测了下,貌似没差别。

但假设我们是用神经网络模型去预测,由于NN参数多,学习能力强,优化函数都是随机梯度下降(或者其他随机函数),需要避免 stuck in a local minimum, 所以就对数据的 randomness 要求比较高。而且假设送进去的数据是按照某个规律去排列的,这个规律本身极大可能也会被NN学习到,但这个规律是一个本来不应该被学到的规律,模型中包含这个顺序的规律会干扰后来的预测。

简单说,对于那种对随机性比较敏感的模型,典型的就是 NN,打乱数据很重要。对于那种对随机性不太敏感的模型,理论上说可以不打乱。但敏感不敏感也跟数据量级,复杂度,算法内部计算机制都有关,目前并没有一个经纬分明的算法随机度敏感度列表。既然打乱数据并不会得到一个更差的结果,一般推荐的做法就是打乱全量数据。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM