Python 经过训练的机器学习模型太大了

Python 经过训练的机器学习模型太大了,python,machine-learning,pickle,random-forest,Python,Machine Learning,Pickle,Random Forest,我们为一些回归任务训练了一个额外的树模型。我们的模型由3棵额外的树组成,每棵树有200棵深度为30的树。在3棵额外的树上,我们使用岭回归。 我们对模型进行几个小时的训练,并对训练过的模型(整个类对象)进行pickle处理,以备将来使用。但是,保存的训练模型太大,大约140 GB! 有没有办法减小已保存模型的大小?pickle中是否有任何有用的配置或pickle的任何替代方案?在最好的情况下(二叉树),您将拥有3*200*(2^30-1)=644245094400节点或434Gb,假设每个节点只需

我们为一些回归任务训练了一个额外的树模型。我们的模型由3棵额外的树组成,每棵树有200棵深度为30的树。在3棵额外的树上,我们使用岭回归。 我们对模型进行几个小时的训练,并对训练过的模型(整个类对象)进行pickle处理,以备将来使用。但是,保存的训练模型太大,大约140 GB! 有没有办法减小已保存模型的大小?pickle中是否有任何有用的配置或pickle的任何替代方案?

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


编辑:糟糕的数学。

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

   from sklearn.externals import joblib
   joblib.dump(your_algo,  'pickle_file_name.pkl',compress=3)
压缩-从0压缩到9。值越高意味着压缩越多,但读写时间也越慢。使用值3通常是一个很好的折衷方案

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

范例

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

更多信息,请参见[link]:()

scikit模型持久化表明,在某些情况下使用
joblib
可能更有效。您的计算假设树都已满?是的,我假设树是自平衡树,并且节点在所有深度上分布均匀。