训练有素的机器学习模型太大

Posted

技术标签:

【中文标题】训练有素的机器学习模型太大【英文标题】:Trained Machine Learning model is too big 【发布时间】:2017-09-21 08:14:35 【问题描述】:

我们已经为一些回归任务训练了一个 Extra Tree 模型。我们的模型由 3 棵额外的树组成,每棵树有 200 棵深度为 30 的树。在这 3 棵额外的树之上,我们使用岭回归。 我们训练我们的模型几个小时并腌制训练好的模型(整个类对象),以备后用。但是,保存的训练模型的大小太大了,大约 140 GB! 有没有办法减小保存模型的大小?泡菜中是否有任何可能有用的配置,或者泡菜的任何替代品?

【问题讨论】:

scikit 模型持久化page 表明在某些情况下使用joblib 会更有效。 【参考方案1】:

您可以尝试使用带有压缩参数的joblib。

   from sklearn.externals import joblib
   joblib.dump(your_algo,  'pickle_file_name.pkl',compress=3)

compress - 从 0 到 9。更高的值意味着更多的压缩,但也更慢的读写时间。使用值 3 通常是一个很好的折衷方案。

您可以使用 python 标准压缩模块 zlib、gzip、bz2、lzma 和 xz。要使用它,您只需指定具有特定扩展名的格式

例子

joblib.dump(obj, 'your_filename.pkl.z')   # zlib

更多信息,见[链接]:(http://gael-varoquaux.info/programming/new_low-overhead_persistence_in_joblib_for_big_data.html)

【讨论】:

【参考方案2】:

在最好的情况下(二叉树),您将拥有3 * 200 * (2^30 - 1) = 644245094400 节点或434Gb 假设每个节点只需要 1 个字节来存储。相比之下,我认为 140GB 是相当不错的大小。

编辑:数学不好。

【讨论】:

你的计算是假设树都满了? 是的,我假设这些树是自平衡树,并且节点在所有深度上均等分布。

以上是关于训练有素的机器学习模型太大的主要内容,如果未能解决你的问题,请参考以下文章

《机器学习基石》---验证

《机器学习》(西瓜书)摘要

阿里面试——机器学习案例

亚马逊提高全同态加密机器学习模型训练效率

机器学习概论

机器学习概论