Я создаю приложение прогнозирования машинного обучения в plotly-dash (python), где мне нужно, чтобы пользователь мог ввести пять значений атрибутов (float), затем запустить модель и вернуть результат классификациимодель.
Я попытался создать поля ввода для пяти атрибутов с помощью кнопки отправки и затем обратного вызова для запуска модели и возврата прогноза. В конечном коде я планирую добавить еще несколько моделей (и графиков) для выбора из выпадающего меню (следовательно, списка моделей и функции "fitmodel").
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
# data preperation and model building has been removed.
# multiple models will be added to the list, therefore the following setup
models = {'Logistic': log_clf, 'SGD': sgd_clf}
model_names = ['Logistic', 'SGD']
# initiate app
app = dash.Dash(__name__)
server = app.server
app.config.suppress_callback_exceptions = True
# the layout
app.layout = html.Div([
dcc.Dropdown(id='dropdown',
options=[{'label': v, 'value': v} for v in model_names],
value='Logistic'),
html.Div([
html.Div(id='result'),
dcc.Input(id='in1', type='number', value='15.32', debounce=True), # attribute 1
dcc.Input(id='in2', type='number', value='11.21', debounce=True), # attribute 2
dcc.Input(id='in3', type='number', value='120.4', debounce=True), # attribute 3
dcc.Input(id='in4', type='number', value='1326.1', debounce=True), # attribute 4
dcc.Input(id='in5', type='number', value='0.08474', debounce=True), # attribute 5
html.Button(id='submit-button', children='Submit')
])
])
# model function (multiple models will be added, therefore this function)
def TrainModel(model):
fitModel = model.fit(X_train, y_train)
return fitModel
# callback
@app.callback(Output('result', 'children'), [Input('in1', 'value'), Input('in2', 'value'), Input('in3', 'value'), Input('in4', 'value'), Input('in5', 'value')])
def predict(v, i1, i2, i3, i4, i5):
model=models[v]
fitModel = TrainModel(model)
X_new = [[i1], [i2], [i3], [i4], [i5],]
y_new = fitModel.predict(X_new)
for i in range(len(X_new)):
return 'Standardized X values ("{}") resulted in the following prediction class: "{}"'.format(X_new[i], y_new[i])
if __name__ == '__main__':
app.run_server(debug=True)
При выполнении кода я продолжаю получать следующую ошибку:
TypeError: predict() missing 1 required positional argument: 'i5'
У меня есть пять полей ввода (по одному для каждого атрибута), которые упоминаются в макете,обратный вызов и определение функции. Поэтому я не знаю, как решить эту проблему. Любая помощь в правильном направлении приветствуется.
Спасибо!