Как вернуть выходные данные модели ML из пользовательских данных в тире? - PullRequest
0 голосов
/ 08 ноября 2019

Я создаю приложение прогнозирования машинного обучения в 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'

У меня есть пять полей ввода (по одному для каждого атрибута), которые упоминаются в макете,обратный вызов и определение функции. Поэтому я не знаю, как решить эту проблему. Любая помощь в правильном направлении приветствуется.

Спасибо!

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