Передать входы в функцию, чтобы получить прогнозы - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь развернуть модель с помощью функции API REST (новой для нее), чтобы применять прогнозы к немеченым данным на лету. Я не понимаю, как сопоставить мои входные функции функции args (или, может быть, это должно быть kwargs)

Использование этого простого примера в качестве руководства

# Read the fitted model from the file model.pkl
# and define a function that uses the model to
# predict petal width from petal length

import pickle
import numpy as np

model = pickle.load(open('model.pkl', 'rb'))

def predict(args):
  iris_x = np.reshape(float(args.get('petal_length')), (-1,1))
  result = model.predict(iris_x)
  return result[0][0]

predict({'petal_length': 3})
0.88346654397265678

# doing it manually via dataframe

row = {'petal_length': 3}
df = pd.DataFrame([row])
result = model.predict(df)
result[0][0]
0.88346654397265678

В качестве входных данных у меня есть фрейм данных с 13 объектами со смешанными типами данных, которые подключены к конвейеру классификации sklearn, выполняющему такие методы FE, как масштабирование, ohe и tfidf ... функция api не работает и выглядит как-то связанная с форма, основанная на ошибке ... кажется, что формат ввода должен быть кадром данных из-за конвейера sklearn

model = joblib.load(persisted_model)

def preds(args):
  unlabeled_X = np.reshape(args\
                 .get('c1',\
                     'c2',\
                     'c3',\
                     'c4',\
                     'c5',\
                     'c6',\
                     'c7',\
                     'c8',\
                     'c9',\
                     'c10',\
                     'c11',\
                     'c12',\
                     'c13'), (-1,13))
  result = model.predict(unlabeled_X)
  return result[0][0]

# using dummy data as example
preds({
  "c1": "some text",
  "c2": "more text",
  "c3": 0,
  "c4": 0,
  "c5": 0,
  "c6": "cat var",
  "c7": "cat var",
  "c8": "cat var",
  "c9": "flag",
  "c10": 0,
  "c11": 0,
  "c12": 0,
  "c13": 0
})

TypeError: get expected at most 2 arguments, got 13

Если я попробую ручной подход с помощью dict to df, то это сработает

# using dummy data as example
row = {
  "c1": "some text",
  "c2": "more text",
  "c3": 0,
  "c4": 0,
  "c5": 0,
  "c6": "cat var",
  "c7": "cat var",
  "c8": "cat var",
  "c9": "flag",
  "c10": 0,
  "c11": 0,
  "c12": 0,
  "c13": 0
}

df = pd.DataFrame([row])
model.predict(df)[0]
'CLASS1'

Мой главный вопрос: как заставить функцию API работать, чтобы она могла принимать новые данные для прогнозирования?

Возможно, функцию можно изменить, чтобы преобразовать ввод словаря в фрейм данных, чтобы можно было вызывать API?

Спасибо!

...