Python 经过训练的机器学习模型太大了
我们为一些回归任务训练了一个额外的树模型。我们的模型由3棵额外的树组成,每棵树有200棵深度为30的树。在3棵额外的树上,我们使用岭回归。 我们对模型进行几个小时的训练,并对训练过的模型(整个类对象)进行pickle处理,以备将来使用。但是,保存的训练模型太大,大约140 GB! 有没有办法减小已保存模型的大小?pickle中是否有任何有用的配置或pickle的任何替代方案?在最好的情况下(二叉树),您将拥有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*(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
可能更有效。您的计算假设树都已满?是的,我假设树是自平衡树,并且节点在所有深度上分布均匀。