经过训练的机器学习模型太大
Trained Machine Learning model is too big
我们已经为一些回归任务训练了一个 Extra Tree 模型。我们的模型由 3 棵额外的树组成,每棵树有 200 棵深度为 30 的树。在这 3 棵额外的树之上,我们使用岭回归。
我们对模型进行了几个小时的训练,pickle
d 训练模型(整个 class 对象)供以后使用。但是,保存的训练好的模型太大了,大约140GB!
有没有办法减小保存模型的大小? 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)
compress - 从 0 到 9。更高的值意味着更多的压缩,但也更慢的读写时间。使用值 3 通常是一个很好的折衷方案。
您可以使用 python 标准压缩模块 zlib、gzip、bz2、lzma 和 xz。要使用它,您只需指定具有特定扩展名的格式
示例:
joblib.dump(obj, 'your_filename.pkl.z') # zlib
更多信息,请参阅 link。
我们已经为一些回归任务训练了一个 Extra Tree 模型。我们的模型由 3 棵额外的树组成,每棵树有 200 棵深度为 30 的树。在这 3 棵额外的树之上,我们使用岭回归。
我们对模型进行了几个小时的训练,pickle
d 训练模型(整个 class 对象)供以后使用。但是,保存的训练好的模型太大了,大约140GB!
有没有办法减小保存模型的大小? 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)
compress - 从 0 到 9。更高的值意味着更多的压缩,但也更慢的读写时间。使用值 3 通常是一个很好的折衷方案。
您可以使用 python 标准压缩模块 zlib、gzip、bz2、lzma 和 xz。要使用它,您只需指定具有特定扩展名的格式
示例:
joblib.dump(obj, 'your_filename.pkl.z') # zlib
更多信息,请参阅 link。