如何规范化 3D 数组的特定维度

Posted

技术标签:

【中文标题】如何规范化 3D 数组的特定维度【英文标题】:How to normalize a specific dimension of a 3D array 【发布时间】:2021-01-28 10:10:10 【问题描述】:

sklearn.preprocessing.normalize 仅支持二维数组归一化。 但是,我目前有一个用于 LSTM 模型训练(批量、步骤、特征)的 3D 数组,我希望对特征进行归一化。

我试过tf.keras.utils.normalize(X_train, axis=-1, order=2 )但是不正确。

另一种方法是将3D数组折叠成2D数组

print(X_train.shape)
print(max(X_train[0][0]))

输出

(1883, 100, 68)
6.028588763956215
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)
X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)
print(X_train.shape)
print(max(X_train[0][0]))
print(min(X_train[0][0]))

输出

(1883, 100, 68)
3.2232538993444533
-1.9056918449890343

该值仍然不在 1 和 -1 之间。

我应该如何处理它?

【问题讨论】:

@MarcoCerliani 我建议您将其发布为专门使用MinMaxScaler 的答案,以便 OP 随后可以接受并解决问题(它不是 exact 重复) . 【参考方案1】:

按照 cmets 的建议,我提供了答案

您可以使用 sklearn 预处理方法缩放 3D 数组。您只需重新执行 2D 数据以适应它们,然后返回 3D。这可以通过几行代码轻松完成。

如果您希望缩放数据在 (-1,1) 范围内,您可以简单地使用 MinMaxScaler 指定 feature_range=(-1,1)

X_train = np.random.uniform(-20,100, (1883, 100, 68))
X_test = np.random.uniform(-20,100, (100, 100, 68))

print(X_train.shape)
print(X_train.min().round(5), X_train.max().round(5)) # -20, 100

scaler = MinMaxScaler(feature_range=(-1,1))
X_train = scaler.fit_transform(X_train.reshape(X_train.shape[0], -1)).reshape(X_train.shape)
X_test = scaler.transform(X_test.reshape(X_test.shape[0], -1)).reshape(X_test.shape)

print(X_train.shape)
print(X_train.min().round(5), X_train.max().round(5)) # -1, 1

【讨论】:

以上是关于如何规范化 3D 数组的特定维度的主要内容,如果未能解决你的问题,请参考以下文章

规范化python中的numpy数组列

unity3d模型制作规范

如何将 N-D 数组的最后两个维度作为 2D 数组?

n维数组构造函数的模板规范

-订单管理

谷歌数据工作室中的规范化数据?