Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在python中加载一次模型并再次重用它?_Python_Scikit Learn - Fatal编程技术网

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

是否可以在python中加载一次模型并再次重用它?,python,scikit-learn,Python,Scikit Learn,我已经培训了scikit学习模型,现在我想在python代码中使用它。 有没有办法重复使用同一个模型实例? 通过一种简单的方式,我可以在需要时再次加载模型,但由于我的需求更频繁,我希望加载一次模型并再次重用它 有没有一种方法可以在python中实现这一点 下面是prediction.py中一个线程的代码: clf = joblib.load('trainedsgdhuberclassifier.pkl') clf.predict(userid) 现在对于另一个用户,我不想再次启动predict

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

有没有一种方法可以在python中实现这一点

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

clf = joblib.load('trainedsgdhuberclassifier.pkl')
clf.predict(userid)
现在对于另一个用户,我不想再次启动prediction.py并花费时间加载模型。有没有一种方法,我可以简单地写

new_recommendations = prediction(userid)

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

根据Scikit学习文档,以下代码可能会帮助您:

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学习估计器的情况一样,但只能pickle到磁盘,而不能pickle到字符串:

from sklearn.externals import joblib
joblib.dump(clf, 'filename.pkl') 
稍后,您可以使用以下命令加载pickle模型(可能在另一个Python进程中):

再次加载模型后。您可以重复使用它,而无需重新培训

clf.predict(X[0])

来源:

首先,您应该检查这有多大程度的瓶颈,以及是否确实值得避免IO。SGDClassizer通常非常小。您可以轻松地重用模型,但问题并不是如何重用模型,而是如何将新的用户实例传递给分类器

我想,
userid
是一个特征向量,而不是一个ID,对吗

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

谢谢您的回答。我知道这个joblib.load。我想要的是再次从joblib.load('filename.pkl')恢复clf。我该怎么做?我不想为多个用户加载它,因为这需要时间!!好的,如果我理解正确,那么您可以调用
clf.predict()
clf.transform()
方法,具体取决于您使用的估计器类型或您想要实现的目标。你不必再适应这个模型了。。。如果您没有提供任何代码示例,则很难提供帮助。@ashu,请提供代码,以便@Oq01可以帮助您
pickle
是正确的选择。@alvas在问题中就是这么做的@阿苏,谢谢,但这让人困惑。您似乎没有使用scikit学习。这看起来像graphlab,所以我不确定是否会应用相同的方法。
clf.predict(X[0])