Я пытаюсь развернуть модель с помощью функции 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?
Спасибо!