web-dev-qa-db-ja.com

タイプ 'ndarray'のオブジェクトはJSONシリアル化できません

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

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

しかし、次の例外をスローしています

Object of type 'ndarray' is not JSON serializable

NumPy配列はJSONシリアライズ可能ではありません

それでも同じエラー。この問題を解決するにはどうすればよいですか

8
user1188867

tolist()メソッドでndarrayを変換してみてください:

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

jsonパッケージを使用した例:

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

出力されるはずです:

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