训练有素的机器学习模型太大
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 是相当不错的大小。
编辑:数学不好。
【讨论】:
你的计算是假设树都满了? 是的,我假设这些树是自平衡树,并且节点在所有深度上均等分布。以上是关于训练有素的机器学习模型太大的主要内容,如果未能解决你的问题,请参考以下文章