从烧瓶返回多个(批量)预测-问题

在烧瓶中调用我的预测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}]
sydth 回答:从烧瓶返回多个(批量)预测-问题

找出解决方法,以防其他人发现此问题

json_ = request.get_json()
test = json.loads(json_)

for i in test:
    t = pd.get_dummies(pd.DataFrame(test))
    r = t.reindex(columns=model_columns,fill_value=0)
    predicted_class = rfc.predict(r)
    probabilities = rfc.predict_proba(r)

    # Prepare response
    res = {'class': predicted_class.tolist(),'probabilities': probabilities.tolist()}
    content = [dict(zip(res.keys(),i)) for i in zip(*res.values())]
本文链接:https://www.f2er.com/3162522.html

大家都在问