Почему мое приложение выводит одинаковый результат для каждого нового ввода? - PullRequest
0 голосов
/ 26 марта 2019

Я создаю приложение, которое предсказывает виды цветка ириса, используя набор данных цветка ириса. Я создаю приложение с помощью Flask. Я даю разные данные для приложения, но получаю разные результаты по сравнению с моей моделью kaggle. Я считаю, что в моем коде нет ничего плохого в машинном обучении, потому что я выполнил его в Kaggle, и разные входные данные приводили к разным предсказанным результатам. Кажется, я не понимаю, что происходит и почему результаты не меняются после того, как я интегрировал машинное обучение с HTML. Поскольку я новичок в Flask, было бы очень признательно, если бы объяснение было простым.

```
from flask import Flask, render_template, url_for, request, redirect
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
from forms import InputForm
from io import StringIO
import pickle


app = Flask(__name__)
app.config['SECRET_KEY'] = '0dfd576186d78d2318e8c2987d56ec42'

@app.route('/')
def home():
    form = InputForm()
    return render_template('home.html', form=form)


@app.route('/predict', methods=['GET', 'POST'])
def predict():  
    icd = pd.read_csv("F:\Alekhya\Projects\IrisProject\data\irisdata.csv")
    features = ['sepal_length_cm', 'sepal_width_cm', 'petal_length_cm', 'petal_width_cm']
    X = icd[features]
    y = icd['class']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)
    knn = KNeighborsClassifier(n_neighbors=7)
    knn.fit(X_train,y_train)
    pickle.dump(knn, open('model.pkl','wb'))
    model = pickle.load(open('model.pkl', 'rb'))

    if request.method == 'POST':
        pl = request.form['pl']
        sl = request.form['sl']
        pw = request.form['pw']
        sw = request.form['sw']
        df = pd.DataFrame({'sepal_length_cm': [sl], 'sepal_width_cm': [sw], 'petal_length_cm':[pl], 'petal_width_cm':[pw]})
        prediction = model.predict(df)
        return render_template('prediction.html', prediction=prediction[0])

Это мой Home.html

{% extends "layout.html" %}
{% block content %} 

    <div class="content-section">
        <form method="POST" action="{{ url_for('predict') }}">
            {{ form.hidden_tag() }}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Type the measurements in cm</legend>
                <div class="form-group">
                    {{ form.Petal_length.label(class="form-control-label") }}

                    {% if form.Petal_length.errors %}
                        {{ form.Petal_length(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.Petal_length.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        <input name="pl" class="form-control form-control-lg" type="text"></input>
                    {% endif %}
                </div>

                <div class="form-group">
                    {{ form.Sepal_length.label(class="form-control-label") }}

                    {% if form.Sepal_length.errors %}
                        {{ form.Sepal_length(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.Sepal_length.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        <input name="sl" class="form-control form-control-lg" type="text"v></input>
                    {% endif %}
                </div>

                <div class="form-group">
                    {{ form.Petal_width.label(class="form-control-label") }}

                    {% if form.Petal_width.errors %}
                        {{ form.Petal_width(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.Petal_width.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        <input name="pw" class="form-control form-control-lg" type="text"></input>
                    {% endif %}
                </div>

                <div class="form-group">
                    {{ form.Sepal_width.label(class="form-control-label") }}

                    {% if form.Sepal_width.errors %}
                        {{ form.Sepal_width(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.Sepal_width.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        <input name="sw" class="form-control form-control-lg" type="text"></input>
                    {% endif %}
                </div>
            </fieldset>
            <div class="form-group">
                {{ form.submit(class="btn btn-outline-info") }}
            </div>
        </form>
        <div class="p-3 mb-2 bg-dark text-white">
            {{ prediction }}
        </div>
        </div>

{% endblock content %}

Это мой прогноз.html

{% extends "layout.html" %}
{% block content %} 

    <div class="content-section">
        <div class="form-group">
            <div class="p-3 mb-2 bg-dark text-white">
                {{ prediction }}
            </div>
        </div>
        <div class="form-group">
            <button class="btn btn-outline-info"><a href={{ url_for('home') }}>Go Back</a></button>
        </div>
    </div>

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