是否可以加载模型一次并在python中重新使用它?

时间:2014-10-21 17:47:12

标签: python scikit-learn

我已经训练了scikit学习模型,现在我想在我的python代码中使用。 有没有办法可以重复使用相同的模型实例? 以一种简单的方式,我可以在需要时再次加载模型,但由于我的需求更频繁,我想加载模型一次并重新使用它。

有没有办法在python中实现这个目标?

以下是prediction.py中的一个线程的代码:

clf = joblib.load('trainedsgdhuberclassifier.pkl')
clf.predict(userid)

现在对于另一个用户,我不想再次启动prediction.py并花时间加载模型。有没有办法,我可以简单地写一下。

new_recommendations = prediction(userid)

我应该在这里使用多处理吗?我不确定!!

2 个答案:

答案 0 :(得分:4)

根据Scikit-learn文档,以下代码可能对您有所帮助:

from sklearn import svm
from sklearn import datasets
clf = svm.SVC()
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X, y)  
import pickle
s = pickle.dumps(clf)
clf2 = pickle.loads(s)
clf2.predict(X[0])

在scikit的特定情况下,使用joblib替换pickle(joblib.dump& joblib.load)可能更有趣,这对于在内部携带大型numpy数组的对象更有效,因为通常情况下对于拟合的scikit-learn估算器,但只能腌制到磁盘而不是字符串:

from sklearn.externals import joblib
joblib.dump(clf, 'filename.pkl') 

稍后您可以使用以下命令加载pickle模型(可能在另一个Python进程中)

clf = joblib.load('filename.pkl') 

再次装入模型后。您可以重复使用它而无需重新训练。

clf.predict(X[0])

来源:http://scikit-learn.org/stable/modules/model_persistence.html

答案 1 :(得分:0)

首先,您应该检查这是多少瓶颈以及是否真的值得避开IO。 SGDC分类器通常很小。您可以轻松地重用该模型,但问题并不是关于如何重用我所说的模型,而是如何将新用户实例添加到分类器。

我认为userid是一个特征向量,而不是一个ID,对吗?

要使模型对新数据进行预测,您需要某种基于事件的处理,在新输入到达时调用模型。 我到目前为止还不是专家,但我认为一个简单的解决方案可能是使用http接口并使用轻量级服务器,如flask