use*_*867 9 python numpy machine-learning flask scikit-learn
我是python和机器学习的新手。我有一个线性回归模型,该模型能够根据我转储以与Web服务一起使用的输入来预测输出。请参见下面的代码:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
regression_model = LinearRegression()
regression_model.fit(X_train, y_train)
print(regression_model.predict(np.array([[21, 0, 0, 0, 1, 0, 0, 1, 1, 1]]))) # this is returning my expected output
joblib.dump(regression_model, '../trainedModels/MyTrainedModel.pkl')
Run Code Online (Sandbox Code Playgroud)
使用flask我尝试将其公开为Web服务,如下所示:
@app.route('/predict', methods=['POST'])
def predict():
X = [[21, 0, 0, 0, 1, 0, 0, 1, 1, 1]]
model = joblib.load('../trainedModels/MyTrainedModel.pkl')
prediction = model.predict(np.array(X).tolist())
return jsonify({'prediction': list(prediction)})
Run Code Online (Sandbox Code Playgroud)
但是它抛出以下异常
Object of type 'ndarray' is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我试过了 NumPy数组不是JSON可序列化的
但仍然是相同的错误。我该如何解决这个问题
Mak*_*ski 10
尝试将您的ndarraywith tolist()方法转换为:
prediction = model.predict(np.array(X).tolist()).tolist()
return jsonify({'prediction': prediction})
Run Code Online (Sandbox Code Playgroud)
json包示例:
a = np.array([1,2,3,4,5]).tolist()
json.dumps({"prediction": a})
Run Code Online (Sandbox Code Playgroud)
那应该输出:
'{"prediction": [1, 2, 3, 4, 5]}'
Run Code Online (Sandbox Code Playgroud)