【问题标题】:How to predict from model without training again?如何在不再次训练的情况下从模型中预测?
【发布时间】:2019-06-06 06:03:27
【问题描述】:

我正在 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]))

【问题讨论】:

    标签: python tensorflow heroku machine-learning flask


    【解决方案1】:

    如果您执行.fit,那么它显然会再次训练,而且您似乎正是这样做的。如果你想部署一个已经训练过的分类器,你必须保存它,这样它就不会失去训练过的权重。

    如果您想保留经过训练的分类器 sklearn 建议三个选项:

    • pickle:只需腌制训练好的分类器并恢复它。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2022-10-19
      • 2020-09-02
      • 2019-10-10
      • 2023-01-03
      • 2018-12-12
      • 1970-01-01
      • 2021-04-17
      • 2021-03-12
      相关资源
      最近更新 更多