Результат не отображается для прогноза машинного обучения на веб-странице - PullRequest
0 голосов
/ 09 апреля 2019

Я работаю над обнаружением вредоносных веб-страниц, используя логистическую регрессию, и использовал набор данных из kaggle.Используя флягу и HTML, я хочу предсказать, будет ли URL хорошим или плохим.

это фрагмент кода в app.py

if request.method=='POST':
        comment=request.form['comment']
        X_predict1=[comment]
        predict1 = vectorizer.transform(X_predict1)
        New_predict1 = logit.predict(predict1)
        new = New_predict1.tolist()
        new1 = " ".join(str(x) for x in new)
    return render_template('result.html',prediction=new1)

этот код, который я написал в результате.html

{% if prediction == 1%}

 <h2 style="color:red;">Bad</h2>
 {% elif prediction == 0%}
 <h2 style="color:blue;">Good</h2>
 {% endif %}

Почему результаты (плохие / хорошие) не отображаются для этого кода?

1 Ответ

0 голосов
/ 09 апреля 2019

Я полагаю в app.py:

  • New_predict1.tolist() возвращает список.
  • " ".join(str(x) for x in new) возвращает объединенное строковое значение.

В result.html:

  • prediction == 1 или prediction == 0 сравнивается значение prediction с целым числом.Но с app.py вы отправляете объединенное строковое значение.Таким образом, это Bad или Good не будет отображаться в шаблоне.
  • Вам необходимо использовать сравнение строк, например: prediction == "some constant"

Я воспроизвел ваш сценарий:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods = ['GET', 'POST'])
def home():
    if request.method == "POST":
        comment=request.form.get('comment')
        X_predict1=[comment]
        # Do some operations
        #predict1 = vectorizer.transform(X_predict1)
        #New_predict1 = logit.predict(predict1)
        #new = New_predict1.tolist()
        #new1 = " ".join(str(x) for x in new)

        # Dummy list
        new = [1, 2, 3]
        # " ".join() returns a string
        new1 = " ".join(str(x) for x in new)
        return render_template('result.html', prediction=new1)
    return render_template('result.html')

if __name__ == "__main__":
    app.run(debug=True)

result.html:

<html>
<head>
    <title>Home</title>
</head>
<body>
    <form action="/" method="post">
        Comment:
        <input type="text" name="comment"/>
        <input type="submit" value="Submit">
    </form>

    <h3>Prediction Result</h3>
    {% if prediction == 1 %}
    <h2 style="color:red;">Bad</h2>
    {% elif prediction == 0 %}
    <h2 style="color:blue;">Good</h2>
    {% else %}
    <h2 style="color:black;">{{prediction}}</h2>
    {% endif %}
</body>
</html>

Выход:

reproduced OP's scenario

AsВы можете видеть, что блок else запускается в шаблоне, так как блоки if и elif пропускаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...