Python 对Sagemaker RecordIO格式的标签使用numpy.ndarray类型(多标签)?

Python 对Sagemaker RecordIO格式的标签使用numpy.ndarray类型(多标签)?,python,mxnet,amazon-sagemaker,Python,Mxnet,Amazon Sagemaker,我正在尝试编写一个numpy.ndarray作为Amazon Sagemaker转换工具的标签:write_numpy_to_dense_tensor()。它将功能和标签的numpy数组转换为RecordIO,以便更好地使用Sagemaker算法 但是,如果我尝试为标签传递多标签输出,我会得到一个错误,指出它只能是一个向量(即每个要素行的标量) 有没有办法在标签中包含多个值?这对于使用XGBoost、随机森林、神经网络等实现的多维回归非常有用 代码 import sagemaker.amazon

我正在尝试编写一个numpy.ndarray作为Amazon Sagemaker转换工具的标签:write_numpy_to_dense_tensor()。它将功能和标签的numpy数组转换为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
类型:,
X_列车形状:(99192684)
y_列车形状:(9919,20)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
3打印(“y_-train形状:{}”。格式(y_-train.shape))
4f=io.BytesIO()
---->5 smac.将numpy写入密度张量(f,X_train.astype('float32'),y_train.astype('float32'))
~/anaconda3/envs/python3/lib/python3.6/site-packages/sagemaker/amazon/common.py写入密度张量(文件、数组、标签)
94如果标签不是无:
95如果不是透镜(标签形状)==1:
--->96提升值错误(“标签必须是向量”)
97如果labels.shape[0]不在array.shape中:
98 raise VALUERROR(“标签形状{}与数组形状{}不兼容”。格式(
ValueError:标签必须是向量

Tom,XGBoost不支持RecordIO格式。它只支持csv和libsvm。此外,算法本身也不支持多标签。但是有几种方法可以解决这个问题:


Random Cut Forest也不支持多个标签。如果提供了多个标签,则只会选择第一个标签。

谢谢您的回答!您知道在RecordIO适合的情况下,是否有任何算法支持多标签?目前SageMaker内置算法只支持带有RecordIO输入数据的标量标签。