用已知数据集训练出一个较为精准的模型是一件乐事,但当关机或退出程序后再次接到 “ 用新的格式相同的数据来进行预测或分类 ” 这样的任务时;又或者我们想把这个模型发给同事并让TA用于新数据的预测......

难道又要自己或他人重复运行用于训练模型的源数据和代码吗?


joblib 下载/加载最佳模型

下载最佳模型

反复调优后,我们通常能够获得一个相对精准的模型。常见的做法是将其保存在一个变量中用于后续的预测。

Python调用SSD模型 python调用训练好的模型_Python调用SSD模型

得到相对最优模型后,我们便可用变量将其存起来并进行预测

# 将最佳模型存储在变量 best_est 中
best_est = rfc_cv.best_estimator_

当出现文章开头的问题时,重新运行一遍"best_est = rfc_cv.best_estimator_"这行前的所有代码显然是很不明智的。这个时候我们便可以通过 sklearn 的 joblib 包来把我们训练好的模型下载成可执行的代码文件(拓展名为 .m)供后续使用。

from sklearn.externals import joblib
# joblib 中的 dump 函数用于下载模型
joblib.dump(value=best_est, filename='mybest_dt_model.m')

仅仅两行就搞定,接着我们便能看到当前目录出现后缀为 .m 的文件~

加载模型并用于预测

现在楼上的运营部那个懂一点点 Python 的同事已经收到了我发给TA的 m 文件,现在TA只需要一行代码就可将其加载出来,而后便可愉快的使用我训练好的模型了

# 加载模型
model = joblib.load(filename='mybest_dt_model.m')

小结&注意

本文展示了如何通过 joblib 的短短三行代码便将自己的心血下载成可执行文件供自己或别人后续使用,但这其中也有一些值得注意的地方:加载下载好的模型用于预测时,用到的数据的格式应与训练该模型时的一致(变量个数、名称与格式等)。

在从sklearn.externals引入joblib函数时,常会出现如下报错:from sklearn.externalsimport joblib ImportError: cannot import name 'joblib',通常joblib导入不成功时主要是sklearn版本的问题,我们可以先卸载原有的sklearn,pip uninstall joblibscikit-leran sklearn,再安装指定版本的sklearn,pip install Scikit-learn==0.20.4 即可。

今天就先到这里,我们下次见