I am new to python and machine learning. I have a Linear Regression model which is able to predict output based on the input which I have dumped to be used with a web service. See the code below:
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')
Using flask I am trying this to expose as a web service as below:
@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)})
But it is throwing the following exception
Object of type 'ndarray' is not JSON serializable
I tried NumPy array is not JSON serializable
but still the same error. How can i solve this issue
Use the cls kwarg of the json. dump() and json. dumps() method to call our custom JSON Encoder, which will convert NumPy array into JSON formatted data. To serialize Numpy array into JSON we need to convert it into a list structure using a tolist() function.
Use toJSON() Method to make class JSON serializable So we don't need to write custom JSONEncoder. This new toJSON() serializer method will return the JSON representation of the Object. i.e., It will convert custom Python Object to JSON string.
Python's NumPy array can be used to serialize and deserialize data to and from byte representation.
To convert a NumPy array (ndarray) to a Python list use ndarray. tolist() function, this doesn't take any parameters and returns a python list for an array. While converting to a list, it converts the items to the nearest compatible built-in Python type.
Try to convert your ndarray
with tolist()
method:
prediction = model.predict(np.array(X).tolist()).tolist()
return jsonify({'prediction': prediction})
Example with json
package:
a = np.array([1,2,3,4,5]).tolist()
json.dumps({"prediction": a})
That should output:
'{"prediction": [1, 2, 3, 4, 5]}'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With