我正在构建一个神经网络,目的是在将来对新数据进行预测。我首先使用sklearn.preprocessing预处理训练数据,然后训练模型,然后进行一些预测,然后关闭程序。将来,当新数据出现时,我必须使用相同的预处理比例来转换新数据,然后再将其放入模型中。目前,我必须加载所有旧数据,适合预处理器,然后使用这些预处理器转换新数据。有没有办法让我保存预处理对象对象(比如sklearn.preprocessing.StandardScaler),以便我可以加载旧对象而不必重新制作它们?
答案 0 :(得分:3)
我认为,除了泡菜外,您还可以使用joblib
来做到这一点。如Scikit-learn的手册3.4. Model persistence
在scikit-learn的特定情况下,最好使用joblib代替pickle(转储和加载),这在内部携带大型numpy数组的对象上效率更高,这通常是适合scikit-learn的情况估计量,但只能将其腌制到磁盘上,而不能腌制到字符串中:
from joblib import dump, load
dump(clf, 'filename.joblib')
稍后,您可以使用以下方法重新加载腌制的模型(可能在另一个Python进程中):
clf = load('filename.joblib')
有关其他信息,请参见其他帖子Saving StandardScaler() model for use on new datasets,Save MinMaxScaler model in sklearn。
答案 1 :(得分:1)
如lejlot所述,您可以使用库pickle将经过训练的网络保存为硬盘中的文件,然后您只需加载它即可开始预测。
以下是如何使用pickle来保存和加载python对象的示例:
import pickle
import numpy as np
npTest_obj = np.asarray([[1,2,3],[6,5,4],[8,7,9]])
strTest_obj = "pickle example XXXX"
if __name__ == "__main__":
# store object information
pickle.dump(npTest_obj, open("npObject.p", "wb"))
pickle.dump(strTest_obj, open("strObject.p", "wb"))
# read information from file
str_readObj = pickle.load(open("strObject.p","rb"))
np_readObj = pickle.load(open("npObject.p","rb"))
print(str_readObj)
print(np_readObj)