专栏首页AI研习社数据太大爆内存怎么办?七条解决思路 | 机器学习开发手册

数据太大爆内存怎么办?七条解决思路 | 机器学习开发手册

Jason Brownlee

在研究、应用机器学习算法的经历中,相信大伙儿经常遇到数据集太大、内存不够用的情况。

这引出一系列问题:

  • 怎么加载十几、几十 GB 的数据文件?
  • 运行数据集的时候算法崩溃了,怎么办?
  • 怎么处理内存不足导致的错误?

本文将讨论一些常用的解决办法,供大家参考。

处理大型 ML 数据文件的七种思路

1. 分配更多内存

有的机器学习工具/库有默认内存设置,比如 Weka。这便是一个限制因素。

你需要检查一下:是否能重新设置该工具/库,分配更多内存。

对于 Weka,你可以在打开应用时,把内存当作一个参数进行调整。

2. 用更小的样本

你真的需要用到全部数据吗?

可以采集一个数据的随机样本,比如前 1,000 或 100,000 行。在全部数据上训练最终模型之前(使用渐进式的数据加载技巧),先试着用这个小样本解决问题。

总的来说,对算法做快速地抽查、看到结果在前后的变化,在机器学习领域是一个很好的习惯。

你还可以考虑:相对于模型技巧,做一个数据大小的敏感性分析。或许,对于你的随机小样本,有一个天然的边际效应递减分水岭。越过这个关口,继续增加的数据规模带来的好处微乎其微。

3. 更多内存

你必须要用 PC 吗?

你可以考虑内存、性能高一个量级的计算设备。比如,租用 AWS 这样的云服务。租用云端有数十 GB 内存的机器,最低价格每小时不到一美元。我个人觉得这是非常实际的选择。

4. 转换数据格式

你是否把数据存为原始的 ASCII 文本,比如 CSV 文件?

或许,使用其它格式能加速数据载入并且降低内存占用。好的选择包括像 GRIB、NetCDF、HDF 这样的二进制格式。

有很多命令行工具能帮你转换数据格式,而且不需要把整个数据集载入内存里。

换一种格式,可能帮助你以更紧凑的形式存储数据,节省内存空间;比如 2-byte 整数,或者 4-byte 浮点。

5. 流式处理数据,或渐进式的数据加载

你的所有数据,需要同时出现在内存里吗?

或许,你可以用代码或库,随时把需要的数据做流式处理或渐进式加载,导入内存里训练模型。

这可能需要算法使用优化技术迭代学习,比如使用随机梯度下降。那些需要内存里有所有数据、以进行矩阵运算的算法,比如某些对线性回归和逻辑回归的实现,就不适用了。

比如,Keras 深度学习 API 就提供了渐进式加载图像文件的功能,名为 flow_from_directory

另一个例子式 Pandas 库,可批量载入大型 CSV 文件。

6. 使用关系数据库(Relational database)

关系数据库为存储、访问大型数据集提供了标准化的方法。

在内部,数据存在硬盘中,能渐进式地 in batch 批量加载,并使用标准检索语言 SQL 检索。

像 MySQL、Postgres 这样的开源数据库工具,支持绝大多数的(全部?)编程语言。许多机器学习工具,都能直接与关系数据库连通。你也可以用 SQLite 这样更轻量的方法。

我发现,这种方法对大型表格式数据集非常有效率。

再次提醒,你需要用能迭代学习的算法。

7. 使用大数据平台

有的情况下,你可能必须要使用大数据平台,即为处理超大型数据集而开发的平台。它们能让你进行数据转换,并在其上开发机器学习算法。

两个很好的例子是 Hadoop 与机器学习库 Mahout,以及 Spark 与 MLLib 库。

我认为,这是用尽上述办法仍无法解决的情况下,才需要采用的最后手段。单纯是这为你的机器学习项目所带来的额外硬件、软件复杂情况,就会消耗许多精力。

即便如此,有的任务确实数据太过庞大,前面的选项都无法奏效。

本文分享自微信公众号 - AI研习社(okweiwu),作者:三川

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AI Challenger 2018 即将进入决赛,八大数据集抢先看

    雷锋网(公众号:雷锋网) AI 研习社消息,由创新工场、搜狗、美团点评、美图联合主办的 AI Challenger 2018 即将进入第二阶段比赛。今年的大赛主...

    AI研习社
  • transformer 中的注意力机制和胶囊网络中的动态路由:它们在本质上或许具有相似性

    AI 科技评论按:胶囊网络是一种热门的计算机网络模型,倍受人工智能领域相关研究人员的关注。而 transformer 是谷歌在 2017 年的一篇著名论文「At...

    AI研习社
  • 学界 | 生成的图像数据集效果不好?也许你需要考虑内容分布的差异

    对生成数据集和真实数据集差异的探究目前也有不少成果,比如学习不同任务通用的图像特征、学习图像风格迁移等,这样可以让生成数据集中的图像看上去更像真实图像。不过这篇...

    AI研习社
  • 大数据的五大发展趋势

    近几年大数据被越来越广泛的运用到各个领域,也得到了企业对大数据人才的重视,许多公司开始或正在实施和扩展大数据技术应用,大数据在行业内的火爆程度,已经是互联网公司...

    加米谷大数据
  • 中国通信学会信息通信网络技术委员会2017年年会成功举办,三大分论坛聚焦行业热点精彩纷呈

    2017年9月19日,由中国通信学会信息通信网络技术委员会主办,中国电信北京研究院承办的《中国通信学会信息通信网络技术委员会2017年年会暨行业云与大数据高峰论...

    灯塔大数据
  • 大数据的五大发展趋势

    近几年大数据被越来越广泛的运用到各个领域,也得到了企业对大数据人才的重视,许多公司开始或正在实施和扩展大数据技术应用,大数据在行业内的火爆程度,已经是互联网公司...

    加米谷大数据
  • 定位并行应用程序中的可伸缩性问题(最透彻一篇)

    本文由西邮陈莉君教授研一学生梁金荣、戴君毅、马明慧翻译,宋宝华老师指导和审核。译者梁金荣、戴君毅、马明慧同学热爱开源,践行开放、自由和分享。

    Linux阅码场
  • 大数据时代个人学习篇

    牛津大学职业研究分析报告可以看到,大数据智能时代首先取代的是比较有规则的职业,如重复性、机械性的会被淘汰,终身学习、人文沟通、信息化与数字化、智能协作等方面的能...

    凹谷
  • 浅谈程序的内存布局

    现代的应用程序都运行在一个内存空间里,在 32 位系统中,这个内存空间拥有 4GB (2 的 32 次方)的寻址能力。

    刘盼
  • 【算法】机器学习和数据科学最常用到的TOP10算法

    数据科学的实践,需要使用算法和数据科学方法,来帮助数据专业人员从数据中提取洞察力和价值。Kaggle最近的一项调查显示,数据专家在2017年比其他数据科学方法更...

    陆勤_数据人网

扫码关注云+社区

领取腾讯云代金券