Я создаю приложение, которое предсказывает виды цветка ириса, используя набор данных цветка ириса. Я создаю приложение с помощью 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 %}