Использование типа numpy.ndarray (мультилейбл) для меток в формате Sagemaker RecordIO?

Я пытаюсь написать numpy.ndarray в качестве меток для инструмента преобразования Amazon Sagemaker: write_numpy_to_dense_tensor(). Он преобразует массив функций и меток в RecordIO для лучшего использования алгоритмов Sagemaker.

Однако, если я попытаюсь передать вывод с несколькими метками для меток, я получаю сообщение об ошибке, указывающее, что это может быть только вектор (т.е. скаляр для каждой строки объекта).

Есть ли способ иметь несколько значений в метке? Это полезно для многомерных регрессий, которые могут быть достигнуты с помощью XGBoost, случайных лесов, нейронных сетей и т. д.

Код

import sagemaker.amazon.common as smac
print("Types: {}, {}".format(type(X_train), type(y_train)))
print("X_train shape: {}".format(X_train.shape))
print("y_train shape: {}".format(y_train.shape))
f = io.BytesIO()
smac.write_numpy_to_dense_tensor(f, X_train.astype('float32'), y_train.astype('float32'))

Вывод:

Types: <class 'numpy.ndarray'>, <class 'numpy.ndarray'>
X_train shape: (9919, 2684)
y_train shape: (9919, 20)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-fc1033b7e309> in <module>()
      3 print("y_train shape: {}".format(y_train.shape))
      4 f = io.BytesIO()
----> 5 smac.write_numpy_to_dense_tensor(f, X_train.astype('float32'), y_train.astype('float32'))

~/anaconda3/envs/python3/lib/python3.6/site-packages/sagemaker/amazon/common.py in write_numpy_to_dense_tensor(file, array, labels)
     94     if labels is not None:
     95         if not len(labels.shape) == 1:
---> 96             raise ValueError("Labels must be a Vector")
     97         if labels.shape[0] not in array.shape:
     98             raise ValueError("Label shape {} not compatible with array shape {}".format(

ValueError: Labels must be a Vector

person Tom    schedule 06.08.2018    source источник


Ответы (1)


Том, XGBoost не поддерживает формат RecordIO. Он поддерживает только csv и libsvm. Кроме того, сам алгоритм изначально не поддерживает несколько меток. Но есть несколько способов обойти это: Xg boost для классификации по нескольким меткам?

Random Cut Forest также не поддерживает несколько меток. Если предоставлено более одной метки, будет выбрана только первая.

person Yury    schedule 13.08.2018
comment
Спасибо за ответ! Знаете ли вы, поддерживает ли какой-либо из алгоритмов несколько меток, где RecordIO подойдет? - person Tom; 14.08.2018
comment
В настоящее время встроенные алгоритмы SageMaker поддерживают только скалярные метки с входными данными RecordIO. - person Yury; 14.08.2018