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

问题描述 投票:0回答:1

在烧瓶中调用我的预测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}]

我不习惯烧瓶,但是我希望从预测调用中得到的模型是为每个特征集{z0,z1,z2..z120}返回类[0,1]和相应的“概率”值来自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, 1.0, 0.0, 1.0],
 'probabilities': [0.8488858872836712, 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}]
python api flask scikit-learn predict
1个回答
0
投票

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

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())]
© www.soinside.com 2019 - 2024. All rights reserved.