我想将一条sklearn管道保存到磁盘,其中包括一个自定义的预处理和一个RandomForestClassifier,其中所有依赖项都保存在文件中。如果没有此功能,我必须将所有依赖项(自定义模块)复制到同一文件夹中的所有地方要调用此模型(在我的情况下是在远程服务器上)。
预处理程序在一个类中定义,该类位于项目的同一文件夹中的另一个文件( preprocessing.py )中。因此,我可以通过导入对其进行访问。
training.py
from preprocessing import Preprocessor
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
import pickle
clf = Pipeline([
("preprocessing", Preprocessor()),
("model", RandomForestClassifier())
])
# some fitting of the classifier
# ...
# Export
with open(savepath, "wb") as handle:
pickle.dump(clf, handle, protocol=pickle.HIGHEST_PROTOCOL)
我尝试了pickle(及其一些变体),莳萝和joblib,但这没有用。当我将.pkl导入其他地方时(例如在我的远程服务器上)。我的架构中必须有一个完全相同的 preprocessing.py ...这很痛苦。
我希望在其他地方放置另一个文件:
remote.py
import pickle
with open(savepath, "rb") as handle:
model = pickle.load(handle)
print(model.predict(some_matrix))
但是此代码当前给我一个错误,因为它找不到Preprocessor类...