Python 错误:TypeError:类型为';int64';JSON不可序列化,JSON.decoder.JSONDecodeError:应为值:第1行第1列(字符0)
我试图使用Flask部署我的ML模型,但我得到了上面的错误。 下面的代码是iris数据集上的随机森林分类器Python 错误:TypeError:类型为';int64';JSON不可序列化,JSON.decoder.JSONDecodeError:应为值:第1行第1列(字符0),python,json,flask,scikit-learn,Python,Json,Flask,Scikit Learn,我试图使用Flask部署我的ML模型,但我得到了上面的错误。 下面的代码是iris数据集上的随机森林分类器 import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accu
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
加载数据集
拆分数据集
构建模型
训练分类器
物种预测
检查准确性
烧瓶代码:
错误:
回溯(最近一次调用last):文件“new1.py”,第40行,在
打印(r.json())文件
“/home/saurabh/anaconda3/lib/python3.6/site packages/requests/models.py”,
第896行,在json返回complexjson.loads(self.text,**kwargs)文件中
“/home/saurabh/anaconda3/lib/python3.6/json/init.py”,第354行,在
加载返回_default_decoder.decode文件“/home/第357行,在
原始解码从
None json.decoder.JSONDecodeError:预期值:第1行第1列
(字符0)
如果JSON解码失败,
r.JSON()
需要注意的是,调用r.json()
的成功并不表示响应成功。某些服务器可能会在失败的响应中返回json对象(例如HTTP 500的错误详细信息)。将解码并返回此类json。若要检查请求是否成功,请使用r.raise\u for\u status()
或选中r。状态代码是您所期望的
因此,检查您的状态代码,如果它是200,那么它应该解析json
如果是204,则URL有问题。
使用
print(r.status_code)
更多信息您在哪一行收到错误?我得到了状态代码,因为500500内部服务器错误通常发生在编程错误或服务器过载时。一个非常好的主意是在那里有一个漂亮的页面,因为您的应用程序迟早会失败
X_train, X_test, y_train, y_test = train_test_split(X, y ,
random_state = 1)
clf = RandomForestClassifier(n_estimators=100,n_jobs=2)
clf.fit(X_train, y_train)
predicted = clf.predict(X_test)
print(predicted)
print(accuracy_score(predicted, y_test))
import pickle as pickle
pickle.dump(clf,open("rfc.pkl","wb"))
my_rfc = pickle.load(open("rfc.pkl","rb"))
import requests
import json
url="http://127.0.0.1:8000/api"
data=json.dumps({'sl':5.5,'sw':3.2,'pl':3.7,'pw':1.2})
r=requests.post(url,data)
print (r.json())
import numpy as np
from flask import Flask
from flask import abort
from flask import jsonify
from flask import request
import pickle as pickle
my_rfc = pickle.load(open("rfc.pkl","rb"))
app=Flask(__name__)
@app.route('/')
def index():
return "Iris prediction"
@app.route('/api',methods=['POST'])
def make_predict():
data=request.get_json(force=True)
data_request = [[data['sl'],data['sw'],data['pl'],data['pw']]]
data_request = np.array(data_request).reshape(1,4)
y_hat=my_rfc.predict(data_request)
output=[y_hat[0]]
return jsonify(results=output)
if __name__ == '__main__':
app.run(port=8000,debug=True)
print(r.status_code)