Могу ли я заставить Amazon SageMaker выдавать рекомендации на основе исторических данных вместо оценки вероятности?

#amazon-web-services #amazon-sagemaker

#amazon-веб-сервисы #amazon-sagemaker

Вопрос:

У нас есть огромный набор данных в формате CSV, содержащий несколько числовых элементов, таких как этот:

 Year,BinaryDigit,NumberToPredict,JustANumber, ...other stuff
1954,1,762,16, ...other stuff
1965,0,142,16, ...other stuff
1977,1,172,16, ...other stuff
  

Дело в том, что существует сильная корреляция между третьим столбцом и предыдущими столбцами. Итак, я предварительно обработал данные, и теперь они доступны в формате, который я считаю идеальным:

 1954,1,762
1965,0,142
1977,1,172
  

Что я хочу, так это прогноз значения в третьем столбце, используя первые два в качестве входных данных. Итак, в приведенном выше случае я хочу, чтобы введенное значение 1965,0 возвращало значение 142. В реальной жизни этот файл состоит из тысяч строк, но поскольку существует шаблон, я хотел бы получить максимально возможное значение.

На данный момент я настроил задание на обучение в файле CSV, используя алгоритм Linear Learner, со следующими настройками:

 label_size = 1
feature_dim = 2
predictor_type = regression
  

Я также создал модель на ее основе и настроил конечную точку. Когда я вызываю его, я получаю оценку в ответ.

     response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
                                   ContentType='text/csv',
                                   Body=payload)
  

Моя цель здесь — вместо этого получить прогноз третьего столбца. Как я могу этого добиться? Я прочитал много документации по этому поводу, но поскольку я не очень хорошо знаком с AWS, я мог бы также использовать неправильные алгоритмы для того, что я пытаюсь сделать.

(Пожалуйста, не стесняйтесь редактировать этот вопрос, чтобы лучше соответствовать терминологии AWS)

Ответ №1:

Для ввода в формате csv метка должна быть в первом столбце, как указано здесь: Таким образом, вы должны предварительно обработать свои данные, чтобы поместить метку (столбец, который вы хотите предсказать) слева.

Далее вам нужно решить, является ли это проблемой регрессии или проблемой классификации.

Если вы хотите предсказать число, максимально близкое к истинному, это регрессия. Например, истина может быть равна 4, а модель может предсказывать 4,15. Если вам нужно целочисленное предсказание, вы можете округлить выходные данные модели.

Если вы хотите, чтобы прогноз был одной из нескольких категорий, то у вас проблема с классификацией. Например, мы могли бы закодировать ‘Северная Америка’ = 0, ‘Европа’ = 1, ‘Африка’ = 2 и так далее. В этом случае дробное предсказание не имело бы смысла.

Для регрессии используйте 'predictor_type' = 'regressor' , а для классификации с более чем 2 классами используйте, 'predictor_type' = 'multiclass_classifier' как описано здесь.

Выходные данные регрессии будут содержать только 'score' поле, которое является прогнозом модели. Выходные данные многоклассовой классификации будут содержать 'predicted_label' поле, которое является предсказанием модели, а также 'score' поле, которое является вектором вероятностей, представляющим достоверность модели. Индекс с наибольшей вероятностью будет тем, который предсказан как 'predicted_label' . Выходные форматы задокументированы здесь.

Комментарии:

1. Я переключаю ответ на этот, поскольку он намного более подробный. Спасибо!

Ответ №2:

predictor_type = regression не может вернуть предсказанную метку, согласно

документация для линейного обучения:

Для вывода алгоритм linear learner поддерживает форматы application / json, application / x-recordio-protobuf и text / csv. Для моделей бинарной классификации он возвращает как оценку, так и прогнозируемую метку. Для регрессии он возвращает только оценку.

Дополнительную информацию о форматах входных и выходных файлов см. в разделе «Форматы ответов для линейных учащихся» для вывода и в «Типовых тетрадях для линейного учащегося»……….