如何通过模型进行预测而无需再次训练?

时间:2019-06-06 06:03:27

标签: python tensorflow heroku machine-learning flask

我正在heroku上部署Flask应用程序,以根据ML模型进行预测。如何进行预测,而无需为每个预测再次训练?

它在Jupyter Notebook上效果很好,因为我只需要更改输入值并执行该特定单元格即可进行预测。但是,当整个代码在Heroku甚至VSC上运行时,它会一次又一次地训练。

file = ("file.csv")
names = ['index1','index2','index3','output']
.
.
X_train,X_validation,Y_train,Y_validation=model_selection.train_test_split(X,Y,test_size=validation_size,random_state=seed)
.
.
models.append(('KNN',KNeighborsClassifier()))
..
results=[]
names=[]
for name,model in models:
    kfold=model_selection.KFold(n_splits=10,random_state=seed)
    cv_results=model_selection.cross_val_score(model,X_train,Y_train,cv=kfold)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)

knn=KNeighborsClassifier(n_neighbors=10)
knn.fit(X_train,Y_train)
predictions=knn.predict(X_validation)


//I need to make predicitions for the input below:
knn.predict(np.asmatrix([152,92,1,60,70]))

1 个答案:

答案 0 :(得分:1)

如果执行.fit,显然它将再次训练,看来您确实做到了。如果您想部署已经训练有素的分类器,则必须保存它,这样它才不会失去训练有素的权重。

如果您想坚持使用受过训练的分类器sklearn,则建议三个选择:

  • pickle:只需腌制经过训练的分类器并将其恢复。

  • onnxmltools:ONNX是已训练有素的分类器的常用交换工具,您可以加载这些预测器进行预测。

  • sklearn2pmml:与ONNX的故事相同,只是格式不同。

老实说,我不知道哪个是最佳选择,我也没有对其进行测试,但是您应该加载性能测试,因为它是一个heroku应用程序,或者甚至考虑到您的分类器具有持久性的全局变量(不要忘记锁定!)。