web-dev-qa-db-fra.com

L'objet de type 'ndarray' n'est pas sérialisable JSON

Je suis nouveau sur python et apprentissage automatique. J'ai un modèle de régression linéaire qui est capable de prédire la sortie en fonction de l'entrée que j'ai vidée pour être utilisée avec un service Web. Voir le code ci-dessous :

      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')

En utilisant flask j'essaie de l'exposer en tant que service Web comme ci-dessous:

 @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)})

Mais il lève l'exception suivante

Object of type 'ndarray' is not JSON serializable

J'ai essayé le tableau NumPy n'est pas sérialisable JSON

mais toujours la même erreur. Comment puis-je résoudre ce problème

8
user1188867

Essayez de convertir votre ndarray avec la méthode tolist():

prediction = model.predict(np.array(X).tolist()).tolist()
return jsonify({'prediction': prediction})

Exemple avec le package json:

a = np.array([1,2,3,4,5]).tolist()
json.dumps({"prediction": a})

Cela devrait produire:

'{"prediction": [1, 2, 3, 4, 5]}'
8
mxmt