将图像的3D numpy数组重塑为2D numpy数组,用于XGBoost DMatrix输入。

问题描述 投票:0回答:2

我在一个3D数组中得到了一组图像(尺寸为索引*高*宽)。

x_train, x_test, y_train, y_test = train_test_split(X, yy, test_size=0.2, random_state=42, stratify=y)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)

dtrain = xgb.DMatrix(data=x_train, label=y_train)
dtest = xgb.DMatrix(data=x_test)

我从XGBoost DMatrix输入得到一个错误。

ValueError: ('Expecting 2 dimensional numpy.ndarray, got: ', (2164, 120, 431))

从上面打印的数组的形状。

(2164, 120, 431) (542, 120, 431) (2164, 3) (542, 3)

我对如何重塑数据的形状感到困惑。是否需要是2164行*1列?

python numpy xgboost numpy-ndarray
2个回答
1
投票

读取 文件 似乎X需要是二维的,而Y需要是一维的。因此,X需要是形状(index_of_sample,特征),因此宽度和高度需要扁平化为一个单一的向量(这对于图像来说不是一个好主意,因为你失去了结构值,但这又是必须发生的,因为模型是xgb)。

因此,你需要将X重塑为

x_train = x_train.reshape(x_train.shape[0], -1)
x_test = x_test.reshape(x_test.shape[0], -1)

另外,文档中说Y需要是一维的。因此,你需要以某种方式将Y改为一个分类值,而不是当前(我假设)的一维编码。


1
投票

只要重塑你的 x numpy数组。

x_train = x_train.reshape(x_train.shape[0], -1)

x_test = x_test.reshape(x_test.shape[0], -1)

© www.soinside.com 2019 - 2024. All rights reserved.