《Python大规模机器学习》— 2.2.5 ​关注实例排序

举报
华章计算机 发表于 2019/06/12 21:51:33 2019/06/12
【摘要】 本节书摘来自华章计算机《Python大规模机器学习》一书中的第2章,第2.2.5节,作者是[荷]巴斯蒂安·贾丁(Bastiaan Sjardin)[意]卢卡·马萨罗(Luca Massaron)[意]阿尔贝托·博斯凯蒂(Alberto Boschetti)王贵财刘春明译。

2.2.5    关注实例排序

作为数据流主题的总结,必须警告读者:数据流传输时实际上包含了学习过程中的隐藏信息,因为你的学习是按实例顺序进行的。

事实上,在线学习器会根据所评估的每个实例优化其参数,在优化过程中,每个实例都会引导学习器朝某个方向前进。

如果有足够多的评估实例,则在全局过程中学习器应采取正确优化方向

。但是,如果学习器是由有偏差的观察数据训练的(例如,按时间排序或以某种有意义分组的观察数据),那么算法也将学习偏差。训练过程中可以设法不记住之前看见的实例,但不管怎样还是会引入某些偏差。如果正在学习时间序列(对时间流的响应常常是模型的一部分),这种偏差相当有用,但在大多数其他情况下,它会导致某种过拟合,并在最终的模型中导致某种程度的泛化缺失。

如果数据经过某种排序,并且你希望机器算法学习该排序(如ID排序),则有必要在传输数据前尽量打乱其顺序,以获得更适合在线随机学习的最优随机顺序。

最快和占用更少磁盘空间的方式是在内存中流化数据。大多数情况下(但不是全部),由于所训练数据的相对稀疏性和冗余性,以及所使用的压缩算法,该方式是有效的。而在无效的情况下,需要你直接在磁盘上打乱数据,这也意味着要用更多磁盘空间。

这里,首先介绍一种内存中的快速打乱方法,所用的zlib包能快速将行数据压缩到内存中,还会用到random模块中的shuffle函数:

 image.png

image.png

 

对于UNIX用户,通过调用一次sort命令(-R参数),即可很方便地

打乱大量文本文件,并且比Python更有效,通过采用管道技术

,它可以与解压和压缩步骤联合使用。

  具体实现命令类似如下:

 image.png

当RAM不能存储所有压缩数据时,唯一可行的办法是在磁盘上就对文件进行操作。下面的代码段定义了一个函数,它重复地将文件拆分为越来越小的文件,然后在内部打乱它们,最后在更大的文件中将其随机排列。结果不是完全的随机重排,但它的数据行被分散后,足以破坏之前任何可能影响在线学习的顺序:

image.png

image.png

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。