Я прохожу учебник по FM и смог получить прогнозы внутри AWS по тестовым данным, приведенным в блокноте: https://github.com/juliensimon/dlnotebooks/blob/master/sagemaker/03-Factorization-Machines-Movielens.ipynb
Однако сейчас я пытаюсь сделать вывод с моего локального компьютера и передать данные пользователя, для которого сделать вывод, выдает ошибку
ConnectionClosedError: Connection was closed before we received a valid response from endpoint URL:
Это происходит из-за ограничения в 5 МБ для SageMaker API, о чем я знаю, однако я нашел что можно получить разреженный JSON, который можно передать для вывода. Как преобразовать разреженную матрицу в JSON?
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(categories = 'auto')
to_predict = ohe.fit_transform(not_watched_full)
to_predict = to_predict.astype('float32').toarray()
import json
def fm_serializer(data):
js = {'instances': []}
for row in data:
js['instances'].append({'features': row.tolist()})
# print js
return json.dumps(js)
payload = fm_serializer(to_predict.toarray())
Этот код дает полезную нагрузку около 50 МБ, что выше, чем 5:)
Единственное отличие, которое я имею от связанного ноутбука что для преобразования в набор данных с горячим кодированием я использую scikit-learn OneHotEncoder с sparse, установленным в True по умолчанию. Это было хорошо на тренировке FM, например.