我有一个大小为(3275412, 50, 22)
的numpy_array,它表示出于LSTM目的而重塑的数据,并且我有一个目标形状为(3275412,)
的向量。
我想平衡我的数据,以便与目标0
和1
大约有相同数量的数据。
我准备数据的方式使我无法在整形之前执行此平衡操作。
首先,我想应用make_imbalance
函数(有关详细信息,请参见this link),但是我不能将其应用于二维数组(出现错误)。
我的问题是:对于3D阵列,最有效的方法是什么?
我的想法:我首先想到了通过将“第二维”和“第三维”“级联”(但不知道如何告诉我??)将我的3D数组“扁平化”为2-D数组,然后应用{ {1}},然后将结果重塑为3D数组(再次,不知道如何做)。似乎有点棘手...
因此,对于其他平衡方法或重塑3D-> 2D或反之亦然的任何帮助,将不胜感激
答案 0 :(得分:0)
对于未知尺寸,您可以将np.reshape
与-1
一起使用。
data2d = data3d.reshape(data3d.shape[0], -1)
将为您提供形状为(n_samples, n_features)
的二维数组
第二维和第三维合并。
data2d_new, y_new = make_imbalance(data2d, y)
调用make_imbalance
之后,您将获得一个形状为(n_samples_new, n_features)
的2d数组,其中行数为“未知”,但您知道原始3d数组的其他两个“特征”维,所以
data3d_new = data2d.reshape(-1, data3d.shape[1], data3d.shape[2])
将为您提供平衡的3d数据集。