Я хочу получить правильный результат прогноза. Прогноз основан на 5 значениях. Когда у меня было 5 входов с одним значением в каждом входе, прогноз был правильным, но после изменения структуры на 1 вход с 5 значениями в нем прогноз стал неверным. Думаю, это из-за библиотеки select2. Возможно, остальные 4 значения не распознаются, поэтому прогноз неверен, но я не совсем понимаю.
Код:
app.py:
import os
import csv
import prediction
from flask import Flask, jsonify, make_response, render_template, request, redirect, url_for
import pandas as pd
app = Flask(__name__)
with open('templates/Testing.csv') as f:
reader = csv.reader(f)
values = next(reader)
values = values[:len(values)-1]
@app.route('/', methods=['GET'])
def page_show():
return render_template('includes/default.html', values=values)
@app.route('/', methods=['POST'])
def identify():
selected_values = []
if request.form['value']!='' and request.form['value'] not in selected_values:
selected_values.append(request.form['value'])
prognosis = prediction.input_check(selected_values)
return render_template('identify.html', prognosis=prognosis, values=values)
if __name__ == '__main__':
app.run()
default.html:
<form name="value" method="POST" action="/">
<div class="wrap">
<div class="search">
<select id="values" name="value" multiple="multiple" style="width: 80%;">
{% for val in values %}
<option value="{{val}}">{{val}}</option>
{% endfor %}
</select>
<button type="submit" class="searchButton" name=form>
<i class="fa fa-search"></i>
</button>
</div></div></form>
<script>
$(document).ready(function() {
$('#values').select2();
});
</script>
prediction.py:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
import csv,numpy as np,pandas as pd
import os
data = pd.read_csv(os.path.join("templates", "Training.csv"))
df = pd.DataFrame(data)
cols = df.columns
cols = cols[:-1]
x = df[cols]
y = df['prognosis']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)
dt = DecisionTreeClassifier()
clf_dt=dt.fit(x_train,y_train)
indices = [i for i in range(137)]
values = df.columns.values[:-1]
dictionary = dict(zip(values,indices))
def input_check(value):
user_input_values = value
user_input_label = [0 for i in range(137)]
for i in user_input_values:
idx = dictionary[i]
user_input_label[idx] = 1
user_input_label = np.array(user_input_label)
user_input_label = user_input_label.reshape((-1,1)).transpose()
return(dt.predict(user_input_label))
identify.html:
<p><b>{{ prognosis[0] }}</b></p>
Пожалуйста, помогите решить эту проблему. Спасибо.