Есть ли способ сделать вывод SHAP или LIME из Flask в React? - PullRequest
0 голосов
/ 10 марта 2020

Я развертываю модель машинного обучения, написанную в Python, в проекте React JS, используя Flask.

Однако необходимо отобразить выходные данные LIME или SHAP. Кто-нибудь получил какие-либо идеи о том, как отобразить html или js вывод из Flask в React, а затем отобразить его?

Ниже приведен мой код, который в настоящее время отправляет данные в виде чисел, а не изображение / html / js

@app.route('/api/v1', methods=['POST'])
def postTest():
    formData = request.json
    cols = ['TYPE','ORIG', 'DEST', 'DISTANCE']
    flight = []
    for a in cols:
        flight.append(formData[a])
    predic_son = formData['prediction']
    shap_values = explainer.shap_values(np.array(flight).reshape(1,-1))
    res = dict(zip(cols, shap_values[0])) 
    print(type(res))
    return res

Код для ответа на реакцию:

 fetch('http://localhost:5000/api/v1', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      method: 'POST',
      body: JSON.stringify(flight)
    }).then(response => response.json()).then(response => console.log(response));

1 Ответ

0 голосов
/ 13 марта 2020

Вот решение

uf = BytesIO()
shap.force_plot(explainer.expected_value, 
                shap_values[0], 
                flight, 
                matplotlib = True, 
                show = False)
plt.savefig(buf,
            format = "png",
            dpi = 150,
            bbox_inches = 'tight')
dataToTake = base64.b64encode(buf.getbuffer()).decode("ascii")

При кодировании с основанием 64 его можно использовать в качестве источника изображения после извлечения на javascript, просто используйте dataToTake в качестве источника изображения, например:

ср c = данные: изображение / png; base64, {dataToTake}

...