在烧瓶中调用我的预测API时,批量预测出现了问题。以下是预测方法,数据和对api的调用的示例。
我将以下内容用于预测
header = {'Content-Type': 'application/json',\
'accept': 'application/json'}
resp = requests.post("http://0.0.0.0:9099/predict",\
data = json.dumps(data),\
headers = header)
print(resp.status_code)
resp.json()
被调用以进行预测的“数据”如下所示:
[{'z0': -5.256496418,'z1': 9,'z2': -6.89507801,'z3': 41632,'z4': 1.111277867,'z5': -7.535017925,'z6': -7.53415977,'z7': 20.97768985,'z8': -0.17019232,'z9': 0.553848225,...
'z120': 0.456848224},{'z0': -3.256456418,'z1': 2,'z2': -7.89977801,'z3': 49031,'z4': 1.139677866,'z5': -3.095179245,'z6': -9.096615932,...
'z120': 0.235225674}]
我不习惯烧瓶,但是我从预测调用中期望模型返回类[0,1]和每组特征{z0,z1,z2..z120的相应“概率”值}来自json对象中的每个字典。
预测方法:
@app.route('/predict',methods=['POST'])
def predict():
if rfc:
try:
json_ = request.json
print(json_)
json_ = json.dumps(json_)
query = pd.get_dummies(pd.DataFrame([pd.read_json(json_,typ='series')]))
query = query.reindex(columns=model_columns,fill_value=0)
predicted_class = rfc.predict(query)
probabilities = rfc.predict_proba(query)
return jsonify({'class': rfc.classes_.tolist(),'probabilities': probabilities[0].tolist()})
except:
return jsonify({'trace': traceback.format_exc()})
else:
print ('Train the model first')
if __name__ == '__main__':
port = int(os.getenv("PORT",9099))
rfc = joblib.load("rfc_model.pkl")
print ('Model loaded!')
model_columns = joblib.load("model_cols.pkl")
print ('Model columns loaded!')
输出:
{'class': [0.0,1.0],'probabilities': [0.8488858872836712,0.1511141127163287]}
期待这样的事情:
{'class': [0.0,1.0,0.0,0.1511141127163287,0.683927135621122,0.1911441223163237,0.8235758172236725,0.1212134577890257]}
理想情况下,输出为:
[{"class": 0.0,"probability": 0.8488858872836712},{"class": 1.0,"probability": 0.1511141127163287},...
{"class": 1.0,"probability": 0.1212134577890257}]