我已经训练了scikit学习模型,现在我想在我的python代码中使用。 有没有办法可以重复使用相同的模型实例? 以一种简单的方式,我可以在需要时再次加载模型,但由于我的需求更频繁,我想加载模型一次并重新使用它。
有没有办法在python中实现这个目标?
以下是prediction.py中的一个线程的代码:
clf = joblib.load('trainedsgdhuberclassifier.pkl')
clf.predict(userid)
现在对于另一个用户,我不想再次启动prediction.py并花时间加载模型。有没有办法,我可以简单地写一下。
new_recommendations = prediction(userid)
我应该在这里使用多处理吗?我不确定!!
答案 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。