《Python大规模机器学习》— 2.2.5 关注实例排序
2.2.5 关注实例排序
作为数据流主题的总结,必须警告读者:数据流传输时实际上包含了学习过程中的隐藏信息,因为你的学习是按实例顺序进行的。
事实上,在线学习器会根据所评估的每个实例优化其参数,在优化过程中,每个实例都会引导学习器朝某个方向前进。
如果有足够多的评估实例,则在全局过程中学习器应采取正确优化方向
。但是,如果学习器是由有偏差的观察数据训练的(例如,按时间排序或以某种有意义分组的观察数据),那么算法也将学习偏差。训练过程中可以设法不记住之前看见的实例,但不管怎样还是会引入某些偏差。如果正在学习时间序列(对时间流的响应常常是模型的一部分),这种偏差相当有用,但在大多数其他情况下,它会导致某种过拟合,并在最终的模型中导致某种程度的泛化缺失。
如果数据经过某种排序,并且你希望机器算法学习该排序(如ID排序),则有必要在传输数据前尽量打乱其顺序,以获得更适合在线随机学习的最优随机顺序。
最快和占用更少磁盘空间的方式是在内存中流化数据。大多数情况下(但不是全部),由于所训练数据的相对稀疏性和冗余性,以及所使用的压缩算法,该方式是有效的。而在无效的情况下,需要你直接在磁盘上打乱数据,这也意味着要用更多磁盘空间。
这里,首先介绍一种内存中的快速打乱方法,所用的zlib包能快速将行数据压缩到内存中,还会用到random模块中的shuffle函数:
对于UNIX用户,通过调用一次sort命令(-R参数),即可很方便地
打乱大量文本文件,并且比Python更有效,通过采用管道技术
,它可以与解压和压缩步骤联合使用。
具体实现命令类似如下:
当RAM不能存储所有压缩数据时,唯一可行的办法是在磁盘上就对文件进行操作。下面的代码段定义了一个函数,它重复地将文件拆分为越来越小的文件,然后在内部打乱它们,最后在更大的文件中将其随机排列。结果不是完全的随机重排,但它的数据行被分散后,足以破坏之前任何可能影响在线学习的顺序:
- 点赞
- 收藏
- 关注作者
评论(0)